Android 在安卓系统上,你如何判断一个元素何时显示在屏幕上?

Android 在安卓系统上,你如何判断一个元素何时显示在屏幕上?,android,Android,我希望能够知道用户何时能够真正看到我的小部件/片段中的内容(而不是只知道小部件是在折叠下面呈现的,或者是在缓存的片段中呈现的,但可能永远不会显示) 我到处寻找某种钩子,它可以让你知道什么时候屏幕上显示了什么东西,但是找不到。这样的事情是否存在,或者这是安卓忽略的事情?有没有可能以某种方式把这些联系起来,或者我只是运气不好 谢谢 来自活动类的文档: 活动的整个生命周期发生在第一次调用onCreate(Bundle)到最后一次调用onDestroy()之间。活动将在onCreate()中完成“全局”

我希望能够知道用户何时能够真正看到我的小部件/片段中的内容(而不是只知道小部件是在折叠下面呈现的,或者是在缓存的片段中呈现的,但可能永远不会显示)

我到处寻找某种钩子,它可以让你知道什么时候屏幕上显示了什么东西,但是找不到。这样的事情是否存在,或者这是安卓忽略的事情?有没有可能以某种方式把这些联系起来,或者我只是运气不好


谢谢

来自
活动
类的文档:

活动的整个生命周期发生在第一次调用onCreate(Bundle)到最后一次调用onDestroy()之间。活动将在onCreate()中完成“全局”状态的所有设置,并在onDestroy()中释放所有剩余资源。例如,如果它有一个线程在后台运行以从网络下载数据,它可能会在onCreate()中创建该线程,然后在onDestroy()中停止该线程

活动的可见生存期发生在对onStart()的调用到对onStop()的相应调用之间。在此期间,用户可以在屏幕上看到活动,尽管它可能不在前台并与用户交互。在这两种方法之间,您可以维护向用户显示活动所需的资源。例如,您可以在onStart()中注册BroadcastReceiver以监视影响UI的更改,并在用户不再看到您显示的内容时在onStop()中注销它。当活动对用户可见和隐藏时,可以多次调用onStart()和onStop()方法

活动的前台生存期发生在对onResume()的调用和对onPause()的相应调用之间。在此期间,活动位于所有其他活动之前,并与用户交互。活动可能经常处于恢复状态和暂停状态之间——例如,当设备进入睡眠状态时,当传递活动结果时,当传递新的意图时——因此这些方法中的代码应该是相当轻量级的

第二点和第三点似乎清楚地提到了您在寻找什么(onResume()方法)。如果您使用的是片段,同样的规则也适用。片段的
onResume()
方法将在活动的
onResume()
之后调用

编辑:
嗯,显然没有直接的解决办法。我有一个想法,但这更多的是一个即兴创作,而不是一个适当的解决方案。而且,它可能有效,也可能无效。试试这些东西-

  • 如果您在
    ViewPager
    (带选项卡)中使用片段,
    FragmentPagerAdapter
    将对当前显示的片段调用
    setUserVisibilityHint(true)
    。您可以使用片段中的
    getUserVisibilityHint()
    检查这一点
  • 如果您使用
    ScrollView
    作为一个容器,那么您可以监听滚动更改并确定您的片段是可见的还是被滚动出去的。有关更多信息,请参阅
  • 对于单个小部件,可以使用
    View.isVisible()
    检查可见性

  • 这些选项都没有提供明确的基于事件的机制来检查可见性,但也许您可以以某种方式使用它们。一种方法是定义自己的回调,并重写上述方法来调用它们。如果您使用了这些方法(或其他方法),请告诉我。

    来自
    活动
    类的文档:

    活动的整个生命周期发生在第一次调用onCreate(Bundle)到最后一次调用onDestroy()之间。活动将在onCreate()中完成“全局”状态的所有设置,并在onDestroy()中释放所有剩余资源。例如,如果它有一个线程在后台运行以从网络下载数据,它可能会在onCreate()中创建该线程,然后在onDestroy()中停止该线程

    活动的可见生存期发生在对onStart()的调用到对onStop()的相应调用之间。在此期间,用户可以在屏幕上看到活动,尽管它可能不在前台并与用户交互。在这两种方法之间,您可以维护向用户显示活动所需的资源。例如,您可以在onStart()中注册BroadcastReceiver以监视影响UI的更改,并在用户不再看到您显示的内容时在onStop()中注销它。当活动对用户可见和隐藏时,可以多次调用onStart()和onStop()方法

    活动的前台生存期发生在对onResume()的调用和对onPause()的相应调用之间。在此期间,活动位于所有其他活动之前,并与用户交互。活动可能经常处于恢复状态和暂停状态之间——例如,当设备进入睡眠状态时,当传递活动结果时,当传递新的意图时——因此这些方法中的代码应该是相当轻量级的

    第二点和第三点似乎清楚地提到了您在寻找什么(onResume()方法)。如果您使用的是片段,同样的规则也适用。片段的
    onResume()
    方法将在活动的
    onResume()
    之后调用

    编辑:
    嗯,显然没有直接的解决办法。我有一个想法,但这更多的是一个即兴创作,而不是一个适当的解决方案。而且,它可能有效,也可能无效。试试这些东西-

  • 如果您在
    ViewPager
    (带选项卡)中使用片段,
    FragmentPagerAdapter
    将对当前显示的片段调用
    setUserVisibilityHint(true)
    。您可以使用片段中的
    getUserVisibilityHint()
    检查这一点