1

I'm with a noob problem and I need your help, I even tried to use Singleton Pattern, but nothing :( Show you my code below:

This is a class called VideoItemAdapter who extends RecyclerView.Adapter<VideoItemAdapter.VideoViewHolder>

Here my code: from this Class

public class VideoItemAdapter extends RecyclerView.Adapter<VideoItemAdapter.VideoViewHolder> {

private List<VideoItem> videoItems;

public List<VideoItem> getVideoItems() {
    return this.videoItems;
}

public void setVideoItems(List<VideoItem> videoItems) {
    this.videoItems = videoItems;
}

public VideoItemAdapter(List<VideoItem> videoItems) {

    this.videoItems = videoItems;
}

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

@Override
public void onBindViewHolder(@NonNull VideoViewHolder holder, int position) {
    holder.setVideoData(videoItems.get(position));
}

@Override
public int getItemCount() {
    return videoItems.size();
}

static class VideoViewHolder extends RecyclerView.ViewHolder{

    VideoView videoView;
    TextView textVideoTitle, textVideoDescription;
    ProgressBar videoProgressBar;

    public VideoViewHolder(@NonNull View itemView) {
        super(itemView);
        videoView = itemView.findViewById(R.id.videoView);
        textVideoTitle = itemView.findViewById(R.id.textVideoTitle);
        textVideoDescription = itemView.findViewById(R.id.textVideoDescription);
        videoProgressBar = itemView.findViewById(R.id.videoProgressBar);
    }

    void setVideoData(VideoItem videoItem){

        textVideoTitle.setText(videoItem.videoTitle);
        textVideoDescription.setText(videoItem.videoDescription);
        videoView.setVideoPath(videoItem.videoURL);
        MediaPlayer mediaPlayer;

        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                videoProgressBar.setVisibility(View.GONE);
                mp.start();
            }
        });

        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.start();
            }
        });

    }
}

}

And I'd like to manipule the MediaPlayer in my MainActivity, for example, I need to stop or start the media player when a button in MainActivity Xml is pressed, it will make my life easier... there is my code in MainActivity:

final ViewPager2 videosViewPager = findViewById(R.id.videosViewPager);

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

    VideoItem video1 = new VideoItem();
    video1.videoURL = ...
    VideoItemAdapter videoItemAdapter = new VideoItemAdapter(videoItems);
    videosViewPager.setAdapter(videoItemAdapter);

And I need to get the "(MediaPlayer mp)", someone can give me some help I'm newbie programming... >.<

Oh, if you can give some a Class to manage this MediaPlayer, I'll be happy :)

  • Initialize your MediaPlayer Object in your MainActivity. And introduce an interface in your Adapter and whenever the play button fired in the adapter calls the interface method in it and you can easily get the playable file in your Mainactivity and control the Player from there! – Meet Prajapati Oct 18 '21 at 04:15

1 Answers1

0

You can use following code to manage in your project >

            binding.videoView.setVideoPath(videoURL);
            binding.videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                    binding.progressCircular.setVisibility(View.GONE);
                    mp.setLooping(false);
                }
            });

            //when video completed
            binding.videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    binding.videoView.stopPlayback();
                    binding.videoView.setVideoPath(videoURL);
                    binding.videoView.start();

                }
            });

For More details you can see this useful tutorial of VideoView

Rakesh Saini
  • 660
  • 2
  • 7
  • 20