如何知道 Fragment 何时变得不可见

Posted

技术标签:

【中文标题】如何知道 Fragment 何时变得不可见【英文标题】:How to know when Fragment becomes invisible 【发布时间】:2014-04-11 06:16:06 【问题描述】:

我将 ViewPager 与 PagerSlidingTabStrip 一起使用,我有 3 个片段,每个片段都有自己的自定义侦听器。在每个片段中,我都覆盖了 Destroy、Pause 方法,但不幸的是,当我从一个片段移动到另一个片段时,我必须删除一个片段的侦听器,但由于片段保留在内存中,因此没有调用上述方法。这些方法仅在我移动到另一个 Activity 时调用。所以任何人都可以告诉我如何知道片段是否会变得不可见,以便我可以删除侦听器,否则这些侦听器会干扰我所有片段的数据。

【问题讨论】:

【参考方案1】:

我在我的片段中使用它,它被调用了两次。 1)当你走出屏幕时 2)当第一次创建片段时。解决检查this link

@Override
    public void setUserVisibleHint(boolean visible)
        super.setUserVisibleHint(visible);
        if (!visible)
            //when fragment becomes invisible to user,do what you want...
        

【讨论】:

setUserVisibleHint 方法在每次对用户可见时调用。不仅是第一次创建它。 @DinIslamMilon 我没这么说,再读一遍。这个特定的代码被调用了两次if(!visible)【参考方案2】:

您应该使用onPause()onResume(),因为onDestroy() 仅在从内存中删除片段时调用,而不是在它停止运行时调用。

此外,在分页设置中,相邻片段将继续运行。当前片段的任一侧都有一个。

对于可见性检查,您可以检查此线程:

How to determine when Fragment becomes visible in ViewPager

【讨论】:

是的,我怎么知道哪个片段是不可见的? 我更新了我的答案以包含对类似问题的引用。【参考方案3】:

使用ViewPager,您最好覆盖Fragment.setUserVisibleHint() Fragment.onHiddenChanged() 并对可见/隐藏状态变化做出反应。你仍然需要实现onPause()/onResume()。我在this answer 中详细解释过。

【讨论】:

以上是关于如何知道 Fragment 何时变得不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何知道片段何时在 viewpager 中实际可见

Fragment ViewPager 适配器

如何确定控件何时对用户可见?

如何动态地使这个子 Fragment 的 TextView 可见/不可见?

如何检测新对象何时被生成或从统一中删除以获得评分/分数?

Fragment在ViewPager里面的可见、隐藏