Как приостанавливать прошлое видео и запускать следующие при перелистывании ViewPager?

Рейтинг: 1Ответов: 1Опубликовано: 05.02.2023

Пытался сделать получая прошлый слайд и останавливая в нём видео, но при его вызове получаю null.

 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
                                @Override
                                public void onPageSelected(int position) {
                                    super.onPageSelected(position);
                                    try {
                                        JSONObject jop = new JSONObject(finalJsonArray.get(position).toString());
                                        idio = jop.getString("id");
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                    SeekBar prog = getView().findViewById(R.id.seekBar2);
                                    prog.setVisibility(View.VISIBLE);
                                    mProgressBari = getView().findViewById(R.id.seekBar2);
                                    vois = getView().findViewById(R.id.videoView);
                                    vois.getPlayer().play();
                                    if(vois != null){
                                        pg = vois.getPlayer();
                                    }
                                    View view = viewPager2.getChildAt(position-1);
                                    PlayerView pl = view.findViewById(R.id.videoView);

                                    pl.getPlayer().pause();
     }
});

Пытался получать просто не минус позицию, а изначально первую. Но всё равно не получается получить playerview.

Ответы

▲ 0Принят

Я решил эту проблему добавив onViewAttachedToWindow и onViewDetachedFromWindow в свой адаптер. Чтобы все виде которые видны на экране не запускались пока ты до них не долистаешь, я сделал проверку.

Код:

  @Override
public void onViewAttachedToWindow(@NonNull VideoViewHolder holder) {
    super.onViewAttachedToWindow(holder);
    if(paused == 0) {
        if (holder.playerView != null) {
            new Timer().scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    activity1.runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            if (holder.getAbsoluteAdapterPosition() == viewPager2.getCurrentItem()) {
                                holder.playerView.play();
                                cancel();
                            }
                        }
                    });

                }

            }, 0, 500);
        }
    }else{
        if (holder.playerView != null) {
            holder.playerView.pause();
        }
    }
}

@Override
public void onViewDetachedFromWindow(@NonNull VideoViewHolder holder) {
    super.onViewDetachedFromWindow(holder);
        if (holder.playerView != null) {
            holder.playerView.pause();
        }
}