Problem to Manipule MediaPlayer in MainActivity

Viewed 35

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 :)

1 Answers

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

Related