滑动时在 Android ViewPager 中释放媒体播放器

Geo*_*adu 5 android android-fragments android-mediaplayer android-viewpager

上下文: 我有一个活动、4 个片段和一个 viewPager(每个页面由一个片段组成)。每个片段包含一个简短的声音列表(每个最多 5 秒)。预期的行为是:如果用户在某个页面上点击了一个声音并且声音没有播放完,如果用户滑动到另一个页面,媒体播放器将被释放,因此声音将停止播放。

问题: 当向左或向右滑动时,方法 onPause 或 onStop 不会被调用(因为 viewPager 根据定义加载当前页面、上一页和下一页),因此播放最后一页的声音的媒体播放器不会在滑动时停止.

研究: 我搜索过多个职位,涉及到了很多onPageChangeListenersetOffScreenPageLimit,集MediaPlayer的不是片段,但在活动(在我的情况不可能的,因为我的声音列表和适配器)。这里有一些链接,我研究,但并没有解决我的问题:ViewPager刷卡以前的声音多个视频播放器在Android的viewpagerAndroid的MediaPlayer的上ViewPager阻塞UI转换并没有回调的初始页面加载如何处理片段内MediaPlayer对象内部视图寻呼机将 Viewpager 与 MediaPlayer 一起使用

建议?: 如果您对如何解决此问题有任何建议,将不胜感激!谢谢!

Mo1*_*989 1

考虑将片段本身制作为OnPageChangeListener. 然后您可以在附加页面时设置监听器。这将允许您将页面更改信息传递给片段。您可以拥有多个OnPageChangeListener。希望有帮助。

编辑:

考虑这样的事情。

public class PageFragment extends Fragment implements ViewPager.OnPageChangeListener {
    ViewPager pager;

    public void onPageScrollStateChanged (int state){
         // reset the player if needed. you can do this since player object is in this class
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        ....
        pager = (ViewPager) getActivity().findViewById(ViewPagerId);
        pager.addOnPageChangeListener(this);
        ....
    }
    @Override
    public void onDestroyView (){
        ....
        pager.removeOnPageChangeListener(this);
        ....

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是它不起作用。我在片段中使用了 ```implements ViewPager.OnPageChangeListener``` 但方法没有被触发...... (2认同)