在Android上,如何判断元素何时显示在屏幕上?

时间:2016-03-30 17:49:15

标签: android

我希望能够知道用户何时可以实际看到我的窗口小部件/片段中的内容(而不仅仅知道窗口小部件是在折叠下方呈现的,还是在缓存的片段中呈现但实际上可能永远不会得到显示)。

我已经搜索了某种钩子的高低,让你知道什么时候在屏幕上显示,但找不到。这样的事情是存在的,还是这个Android被忽视的东西?是否有可能以某种方式将其拼凑在一起,或者我只是运气不好?

谢谢!

1 个答案:

答案 0 :(得分:0)

来自Activity类的文档:

  

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

     

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

     

活动的前景生命周期发生在对onResume()的调用之间,直到对onPause()的相应调用。在此期间,活动位于所有其他活动之前并与用户交互。活动可以经常在恢复和暂停状态之间进行 - 例如,当设备进入休眠状态,交付活动结果时,交付新意图时 - 因此这些方法中的代码应该相当轻量级。 p>

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

http://developer.android.com/reference/android/app/Activity.html http://developer.android.com/reference/android/app/Fragment.html#Lifecycle

编辑:
好吧,显然没有直接解决方案。我有一个想法,但更多的是即兴创作,而不是一个正确的解决方案。此外,它可能或可能不起作用。试试这些 -

  1. 如果您在ViewPager(带标签)中使用片段,则FragmentPagerAdapter会在当前显示的片段上调用setUserVisibilityHint(true)。您可以在片段中使用getUserVisibilityHint()进行检查。
  2. 如果您使用ScrollView作为容器,也许您可​​以侦听滚动更改并确定您的片段是可见还是向外滚动。有关详细信息,请参阅this answer
  3. 对于各个小部件,您可以使用View.isVisible()检查其可见性。
  4. 这些选项都没有提供明确的基于事件的机制来检查可见性,但也许您可以以某种方式使用它们。一种方法是定义自己的回调,并覆盖上述方法来调用它们。如果您使用这些方法(或其他方法),请告诉我。