2016-06-18 3 views
0

recyclerviewyoutube 개의 동영상을 목록 아래에 하나씩로드해야합니다. 아래 코드를 참조하십시오. 나는 이것에 대해 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

나는 thumbnailview이 아닌 youtube view 만 사용했습니다. 무슨 일이 일어나는지는 버튼이있는 마지막 비디오 만 보이고 재생할 수 있다는 것입니다. –

+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. .
  2. VideoItem이라는 POJO 클래스를 만듭니다.
  3. YouTube를 사용하여 SearchResponse -> SearchListResponse를 작성하십시오. response = query.execute();

4.Store 유튜브의 모든 응답이 뽀조 클래스 목록 listResult = response.getItems 내장();

5.I 모든 항목을 listResult에서 반복하고 내 자신의 POJO 클래스에 VideoItem에 저장합니다.

6. 내 모든 VideoItem을 안에 저장하십시오. List videoItem = new ArrayList <>();