2016-06-18 5 views
0

私はをロードして、youtubeの動画をリストのように下に表示する必要があります。コードは以下のとおりです。私はこれにyoutube apiを使用しました。Youtubeview with RecyclerView読み込み

次のコードの問題は、最後のビデオだけが読み込まれ、渡された値が正しいこと、および動作していることです。リストの他の動画は読み込まれず、黒い画面が表示されます。

public class YoutubeAdapter extends RecyclerView.Adapter<YoutubeAdapter.MyViewHolder> { 
    private String developer_key = "My Developer Key"; 
    private Context context; 
    private ArrayList<String> video_id; 
    private LayoutInflater inflater; 

    public YoutubeAdapter(Context context, ArrayList<String> video_id) { 
     inflater = LayoutInflater.from(context); 
     this.context = context; 
     this.video_id = video_id; 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     YouTubePlayerView youtubeView; 
     public MyViewHolder(View view) { 
      super(view); 
      youtubeView = (YouTubePlayerView) view.findViewById(R.id.youtubeView); 
     } 
    } 

    @Override 
    public YoutubeAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = inflater.inflate(R.layout.video_content,parent,false); 
     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     final String video_string = video_id.get(position); 
     holder.youtubeView.initialize(developer_key, new YouTubePlayer.OnInitializedListener() { 
      @Override 
      public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { 
       if (!b) { 
        youTubePlayer.cueVideo(video_string); 
       } 
      } 

      @Override 
      public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 
       Toast.makeText(context, "Failed to load video", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 


    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public int getItemCount() { 
     return video_id.size(); 
    } 
} 
+0

「youtube videos」のサムネイルがロードされていないことを意味しますか? –

+0

サムネイルビューではなくiのyoutubeビューのみを使用しました。何が起きるのは、ボタン付きの最後のビデオが表示され、再生できることです。 –

+0

はあなたの 'Array List 'サイズ? –

答えて

0

私は同じ問題に直面したので、私はPOJOクラスを使用してすべてのアイテムを保存しようとしました。次に、recyclerviewOnBindHolderでgettersを使用します。出来た。私がしたので、何

private YouTube youTube; 
    private YouTube.Search.List query; 
    public static final String DEVELOPER_KEY="YOUR KEY"; 

    public YoutubeConnector(Context context) { 

     youTube= new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() { 
      @Override 
      public void initialize(HttpRequest httpRequest) throws IOException { 

      } 
     }).setApplicationName(context.getString(R.string.app_name)).build(); 

     try { 

      //this is to filter the query 
      query= youTube.search().list("id,snippet"); 
      query.setKey(DEVELOPER_KEY); 
      query.setChannelId(CHANNEL_ID); 
      query.setType("video"); 
      query.setMaxResults((long) 50); 
      query.setFields("items(id/videoId,snippet/title,snippet/description,snippet/thumbnails/default/url)"); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } 

    public List<VideoItem> queryResult(){ 

     try { 
      // this is youtube built in SearchResponse 
      SearchListResponse response= query.execute(); 

      List<SearchResult> listResult= response.getItems(); 

      List<VideoItem> videoItem= new ArrayList<>(); 

      for (SearchResult result:listResult){ 

       VideoItem item= new VideoItem(); 

       item.setTITLE(result.getSnippet().getTitle()); 
       item.setID(result.getId().getVideoId()); 
       item.setDESCRIPTION(result.getSnippet().getDescription()); 
       item.setURL(result.getSnippet().getThumbnails().getDefault().getUrl()); 

       videoItem.add(item); 
      } 

      return videoItem; 

     } catch (IOException e) { 
      e.printStackTrace(); 

      return null; 
     } 

    } 

されました:私は上記のように示したネットワーク部分を処理するクラスを作成します

  1. 私はVideoItemというPOJOクラスを作成します。
  2. 私はyoutubeをSearchResponse - > SearchListResponseに組み込んで使用します。response = query.execute();

4.Store YouTubeの中のすべての応答は リストlistResult = response.getItems()POJOクラスに内蔵。

5.I listLesultのすべての項目をループし、それを自分のPOJOクラスのVideoItemに格納します。

6.すべてのVideoItemを内部に保存します List videoItem = new ArrayList <>();

関連する問題