0

I am trying for a couple of days to create a RecyclerView which contains multiple YouTube videos using the YouTube API. I tried ExoPlayer before which didnt work out. ChromeWebView works but that is not what I want. The App runs, but there are no videos in the RecyclerView obviously. Do you have suggestions for fixing it?

My Main Activity:

public class MainActivity extends AppCompatActivity {


private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayList<VideoPlayer> videoList = new ArrayList<>();
    videoList.add(new VideoPlayer("f1uFsQ6MUD4"));
    videoList.add(new VideoPlayer("AQCiGXamz6Q"));

    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    adapter = new VideoAdapter(videoList);

    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(adapter);
}

The Adapter:

public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHolder> {
private ArrayList<VideoPlayer> videoPlayers;


public VideoAdapter(ArrayList<VideoPlayer> videoList) {
    videoList = videoPlayers;
}


@NonNull
@Override
public VideoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_video_player, parent, false);
    VideoViewHolder vvh = new VideoViewHolder(view);
    return vvh;
}


@Override
public void onBindViewHolder(@NonNull VideoViewHolder holder, int position) {
    VideoPlayer currentVideoPlayer = videoPlayers.get(position);
    // holder.URL = ?
}


public static class VideoViewHolder extends RecyclerView.ViewHolder {
    public String URL;
    public YouTubePlayerView playerView;
    public Button playButton;

    public VideoViewHolder(@NonNull View itemView) {
        super(itemView);
        playButton = itemView.findViewById(R.id.playButton);
        playerView = itemView.findViewById(R.id.youtubePlayerView);
        //URL = ?
    }
}


@Override
public int getItemCount() {
    return 0; //videoPlayers.size()
}

The VideoPlayer class:

public class VideoPlayer extends YouTubeBaseActivity {


YouTubePlayerView playerView;
Button playButton;
com.google.android.youtube.player.YouTubePlayer.OnInitializedListener onInitializedListener;
private String url;


public VideoPlayer(String url) {
    this.url = url;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video_player);


    playButton = (Button) findViewById(R.id.playButton);
    playerView = (YouTubePlayerView) findViewById(R.id.youtubePlayerView);

    onInitializedListener = new com.google.android.youtube.player.YouTubePlayer.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(com.google.android.youtube.player.YouTubePlayer.Provider provider, com.google.android.youtube.player.YouTubePlayer youTubePlayer, boolean b) {
            youTubePlayer.loadVideo(url);
        }

        @Override
        public void onInitializationFailure(com.google.android.youtube.player.YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

        }
    };


    playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playerView.initialize(String.valueOf(APIKey.getKey()), onInitializedListener);
        }
    });


}
Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
yoKurt
  • 327
  • 1
  • 3
  • 8
  • Have you tried using youtube player sdk for android? – Abbas Oct 31 '19 at 13:11
  • Do you mean the official YouTubePlayer API? If so, yes, it is installed – yoKurt Nov 01 '19 at 09:24
  • I still couldnt figure out a solution as I have to extend the class containing the player with YouTubeBaseActivitiy, but I am extending it already with the Recycler View. – yoKurt Nov 02 '19 at 08:18
  • Taking a quick look at your code, you've made your `VideoPlayer` an `Activity`, you cannot use an Activity in a `RecyclerView` which only manage `Views` as the name suggests. An Activity is a place for Views but not a View itself. However `VideoPlayer` itself cannot be a `View` since it is in fact Model. The view part will be in the class extending from `RecyclerView.ViewHolder` – Abbas Nov 06 '19 at 05:00
  • Treat `VideoPlayer` `List` as Model list and let RecyclerView manage lifecycle of `ViewHolder`s for you. – Abbas Nov 06 '19 at 05:01
  • I made the changes you suggested, but the struggle I have is: how can I put YouTubePlayerView in a RecyclerView, as its class needs to extend YouTubeBaseActivity? I tried it as an Interface, but that doesnt work is my MainActivity extends AppCompatActivity... – yoKurt Nov 19 '19 at 11:55
  • `YouTubePlayerView` needs to be hosted in a `YouTubeActivity`, but that doesn't mean you need to extend your `VideoPlayer` from `YouTubeActivty`. ViewHolder -> RecyclerView and its subsequent parents Containing the `YouTubePlayerView` will be hosted in your `Activity` which in turn extends from `YouTubeBaseActivity`. – Abbas Nov 20 '19 at 04:53

0 Answers0