Как приостанавливать прошлое видео и запускать следующие при перелистывании ViewPager?
Пытался сделать получая прошлый слайд и останавливая в нём видео, но при его вызове получаю 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.
Ответы (1 шт):
Автор решения: YouTuni GG
→ Ссылка
Я решил эту проблему добавив 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();
}
}