Как приостановить видеоплеер в viewpager - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть ViewPager с 3 страницами, на одной из этих страниц у меня есть видеоплеер. Я столкнулся с проблемой, что у меня видео плеер продолжает работать на всех страницах. Как я могу приостановить видео плеер будет меняться страница?

Адаптер:

public class HomeTabsAdapter extends FragmentStatePagerAdapter {

    MainActivity activity;


    public HomeTabsAdapter(MainActivity activity, FragmentManager fm){
        super(fm);
        this.activity = activity;
    }


    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                return VideoTrendsFragment.newInstance();
            case 1:
                return MomytFragment.newInstance();
            case 2:
                return StoryFragment.newInstance();
                default:
                    return MomytFragment.newInstance();
        }
    }

    @Override
    public int getCount() {
        return 3;
    }
}

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Если у вас нет доступа к объекту игрока за пределами ваших фрагментов, вы можете попробовать этот метод.

Текущий конструктор HomeTabsAdapter, расширяющий FragmentStatePagerAdapter, который у вас есть, устарел.

Поэтому я бы посоветовал вам переключить ваш конструктор на следующий, как показано ниже:

//Not sure why you need to have activity in you constructor but since currently does
public HomeTabsAdapter(@NonNull FragmentManager fm, int behavior, MainActivity activity) {
    super(fm, behavior);
    this.activity = activity;
}

Поэтому вам также придется изменить инициирование адаптера в вашей деятельности на что-то вроде:

adapter = new HomeTabsAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

Если вы используете вышеупомянутый флаг поведения, при изменении страницы будет вызываться метод onPause для этого фрагмента и при возврате к нему будет вызываться onResume фрагмента.

Так что вам нужно переопределить эти методы в ваших фрагментах, например:

@Override
public void onPause() {
    super.onPause();
    if(mPlayer.isPlaying())
          mPlayer.pause();
}

Если вы не хотите sh удалить устаревший конструктор, у меня нет идеального решения, но вы можете проверить, попробуйте проверить, если страница видимый с помощью if(getUserVisibleHint()) и пауза для false. но эта проверка будет необходима через регулярные промежутки времени, возможно, с помощью обработчика.

Проверьте, не помогло ли это.

0 голосов
/ 11 февраля 2020

OnPause проверки фрагмента следующим образом -

 @Override
 protected void onPause() {
    super.onPause();
    if(mPlayer.isPlaying()){
        mPlayer.pause();
    } else {
        mPlayer.start();
    }
}
...