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

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

【问题讨论】:

    标签: java android android-viewpager fragment


    【解决方案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 中详细解释过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 2012-04-18
      • 2014-10-26
      • 1970-01-01
      相关资源
      最近更新 更多