检测片段内的ViewPager选项卡更改

l33*_*33t 65 android android-fragments android-viewpager

我有一个ViewPager多个片段.在一个Fragment我播放音频.当我滑动到另一个片段时,我想停止音频播放.如何检测到另一个片段现在可见ViewPager

我试着重写onStoponHiddenChanged.没有成功.必须有一些"你不再活跃"的方法来覆盖.没有?

lou*_*uie 138

我做了一些挖掘,事实证明ViewPager将同时调用:setUserVisibleHintsetMenuVisibility.我会覆盖setUserVisibleHintsetUserVisibleHint文档:

向系统提供有关此片段的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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Yichuan Wang:要在较低的API级别使用Fragment的setUserVisibleHint,请使用Android支持库http://developer.android.com/tools/extras/support-library.html例如,http://developer.android.com/reference /android/support/v4/app/Fragment.html#setUserVisibleHint(boolean)可用于API级别4. (5认同)
  • 在我的情况下,从未调用过setUserVisibleHint. (3认同)
  • 这不可靠,有时会自动调用.我找到了更好的替代方案http://stackoverflow.com/a/25822814/1979347 (3认同)
  • 效果很好但是在方向改变后不再调用.因此,提示不会恢复,但片段是.我怎样才能召回? (2认同)