我有一个带多个片段的ViewPager
。在一个Fragment
中,我播放音频。当我滑动到另一个片段时,我想停止音频播放。如何检测在ViewPager
中另一个片段现在可见?
我尝试了覆盖onStop
和onHiddenChanged
方法。但没有成功。一定有一种方法可以覆盖 "您不再活跃" 的方法。对吧?
我有一个带多个片段的ViewPager
。在一个Fragment
中,我播放音频。当我滑动到另一个片段时,我想停止音频播放。如何检测在ViewPager
中另一个片段现在可见?
我尝试了覆盖onStop
和onHiddenChanged
方法。但没有成功。一定有一种方法可以覆盖 "您不再活跃" 的方法。对吧?
我进行了一些调查,发现ViewPager会调用setUserVisibleHint
和setMenuVisibility
两个方法。根据setUserVisibleHint的文档,我建议重写setUserVisibleHint
方法:
向系统设置一个提示,指示该片段的UI当前是否对用户可见。此提示默认为true,并在片段实例状态保存和恢复期间保持不变。应用程序可以将此设置为false,以指示片段的UI已滚动到视野之外或以其他方式未直接对用户可见。这可能被系统用于优先处理诸如片段生命周期更新或加载器排序行为之类的操作。
请尝试将以下代码放入您的片段中:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
// Make sure that we are currently visible
if (this.isVisible()) {
// If we are becoming invisible, then...
if (!isVisibleToUser) {
Log.d("MyFragment", "Not visible anymore. Stopping audio.");
// TODO stop audio playback
}
}
}