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

Posted

技术标签:

【中文标题】检测片段内的 ViewPager 选项卡更改【英文标题】:Detect ViewPager tab change inside Fragment 【发布时间】:2012-04-04 11:35:33 【问题描述】:

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

我尝试过覆盖onStoponHiddenChanged。没有成功。必须有一些“你不再活跃”的方法来覆盖。没有?

【问题讨论】:

【参考方案1】:

我进行了一些挖掘,结果发现 ViewPager 会同时调用:setUserVisibleHintsetMenuVisibility。我会覆盖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
        
    

【讨论】:

setUserVisibleHint 在我的情况下从未被调用过。 Wayne:根据我的经验,我发现如果 ViewPager 的适配器是 FragmentPagerAdapter,则调用 setUserVisibleHint,但如果它是 FragmentStatePagerAdapter,则不会调用。因此,如果您遇到问题,请尝试确保您使用的是 FragmentPagerAdapter。 王一川:要在较低的API级别使用Fragment的setUserVisibleHint,请使用android支持库developer.android.com/tools/extras/support-library.html,例如developer.android.com/reference/android/support/v4/app/…适用于API级别4。 效果很好,但在方向更改后不会再次调用它。因此,提示不会恢复,但片段会恢复。如何实现召回? 这不可靠,有时会自动调用。我找到了更好的选择***.com/a/25822814/1979347

以上是关于检测片段内的 ViewPager 选项卡更改的主要内容,如果未能解决你的问题,请参考以下文章

使用Android ViewPager2在回收器视图中滚动到底部时自动更改选项卡项

我在 viewpager 选项卡中的片段不刷新

在 ViewPager 的多个选项卡中使用单个片段

listview 没有在带有 viewpager 选项卡的片段中刷新

使用PageChangeListener动态更改选项卡图标的颜色

Android:使用Tab检测单个片段viewpager