【发布时间】:2012-04-04 11:35:33
【问题描述】:
我有一个带有多个片段的ViewPager。在一个Fragment 我播放音频。当我滑动到另一个片段时,我想停止音频播放。如何检测到另一个片段现在在 ViewPager 中可见?
我尝试过覆盖onStop 和onHiddenChanged。没有成功。必须有一些“你不再活跃”的方法来覆盖。没有?
【问题讨论】:
标签: android android-fragments android-viewpager
我有一个带有多个片段的ViewPager。在一个Fragment 我播放音频。当我滑动到另一个片段时,我想停止音频播放。如何检测到另一个片段现在在 ViewPager 中可见?
我尝试过覆盖onStop 和onHiddenChanged。没有成功。必须有一些“你不再活跃”的方法来覆盖。没有?
【问题讨论】:
标签: android android-fragments android-viewpager
我进行了一些挖掘,结果发现 ViewPager 会同时调用:setUserVisibleHint 和 setMenuVisibility。我会覆盖setUserVisibleHint,因为documentation for setUserVisibleHint 声明:
向系统设置有关此片段的 UI 当前是否对用户可见的提示。此提示默认为 true,并且在片段实例状态保存和恢复中保持不变。 应用程序可以将此设置为 false 以指示 Fragment 的 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
}
}
}
【讨论】: