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

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

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

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案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。
    • 效果很好,但在方向更改后不会再次调用它。因此,提示不会恢复,但片段会恢复。如何实现召回?
    • 这不可靠,有时会自动调用。我找到了更好的选择stackoverflow.com/a/25822814/1979347
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多