【问题标题】:How to check if the fragment is visible to user如何检查片段是否对用户可见
【发布时间】:2021-07-12 07:50:54
【问题描述】:

如何在 Android 应用中检查片段是否对用户可见?

我有一个应用,其中 Home activity 有多个 fragments。其中一个片段侦听从 Home 开始的另一个活动的事件,因此每次我从该活动返回 Home 时都会执行一个方法。虽然我想要的是仅触发这些事件并执行该方法如果片段在前台对用户可见。

我尝试了以下方法,但似乎没有任何效果:

  1. isAdded()isVisible() 检查 - 始终在创建片段后立即返回 true,无论片段是否对用户实际可见。
  2. getUserVisibleHint() - 即使我仍在其他活动中,这也会再次返回 true。此外,它也已被弃用,因此即使它有效,我也想寻找其他解决方案。

我已经走到了死胡同,无法找到一种实际的工作方式来检查片段是否对用户真正可见,而不仅仅是添加到内存中。

对此的任何帮助表示赞赏!

【问题讨论】:

    标签: android fragment


    【解决方案1】:

    我在尝试自己的时候终于找到了解决方案:

    简单检查isResumed(),只有当片段处于​​前台和恢复状态时它才会返回true。

    为了安全起见,请检查isVisible,它还会在内部检查isAdded,并会减少条件,所以一个简单的if-condition

    if (isVisible() && isResumed()) {
        // perform your action here
    }
    

    这对我有用!

    【讨论】:

    • 为什么加isResumed()?如果 DialogFragment 显示在片段上方怎么办?在这种情况下,片段已经可见。
    • 1.如果另一个片段或对话框片段在其上方,则前一个片段不会返回真到isResumed,直到对话框被解除并且片段进入前台。 2. 我的用例是从其他活动返回到这个片段,而不是像对话框或其他任何其他情况,恢复状态似乎对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2012-11-24
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多