如何知道 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 何时变得不可见的主要内容,如果未能解决你的问题,请参考以下文章