【问题标题】:How can a view track if it is visible on screen如果在屏幕上可见,视图如何跟踪
【发布时间】:2016-07-26 04:21:54
【问题描述】:

视图是否可以跟踪何时可见以及何时不再在屏幕上可见?这里的关键字是track,而不是“check”。实际上,我正在寻找行为类似于 onShowingOnScreenonStopShowingOnScreen 的东西。

对于某些背景,我的视图嵌套了很多:Activity => ViewPager => Fragment => RecyclerView.Adapter => CatViewHolder => myView

如果你关心:为了这个问题,我们假设这个特定的 CatViewHolder 只使用一次,而其他一些 DogViewHolder 是多次重复使用的。

另外,如果视图不能做到这一点,ViewHolder 能做到吗? (实际上是相同的结果)。

更新

为了完整起见,假设我必须在 myView 可见时将一块平板连接到窗口,并在 myView 不再可见时将该平板从窗口上分离。 (我使用slab是为了不再使用View这个词)。

【问题讨论】:

  • 感谢您的链接。假设我无法更改适配器的构造函数。如何从适配器内部或 ViewHolder 内部获取指向 RecyclerView 的指针?

标签: android android-layout view


【解决方案1】:

首先,视图必须附加到当前视图层次结构。因此,您需要在视图上注册一个 OnAttachStateChangeListenerthis method 以查看它是否可能可见。

然后您可以拨打getWindowVisibleDisplayFrame() 来查看Android 已为其分配了任何显示空间。

【讨论】:

  • 这个答案很有希望,所以非常感谢你(+1)。真的很感谢你。但是会出现一些问题。层次结构中有一个 ViewPager。因此,attached 将在大约三页外被调用,而 detached 将在大约三页外被调用:而我需要在用户位于显示 myView 或离开的页面上的精确时刻执行操作从显示 myView 的页面。死区带来了一些问题。
  • 您可以从主线程中选择调用 getWindowVisibleDisplayFrame 的时刻。如果您在未附加视图的情况下执行此操作,它不会为您提供所需的价值。
猜你喜欢
  • 2018-06-29
  • 2021-11-26
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多