我已经在网上寻找答案,但没有找到此问题的根本原因。
我有一个带有视图的应用程序,它可以监听onVisibilityChanged和onWindowVisibilityChanged。我注意到的是,在具有KitKat(API 19)或Lollipop(API 22)的Android设备上,当视图附加到主布局时,永远不会触发onVisibilityChanged,而只会触发onWindowVisibilityChanged。
我猜这个问题源于从KitKat到Lollipop的本机API更改,但是没有找到任何文档或参考。当我在棉花糖(API 23)上检查我的应用程序时,没有发生。
我只想知道这是一个已知问题,还是有某种方法可以解决此问题。
谢谢。
答案 0 :(得分:0)
看起来Android团队确实确实在Android 23-Marshmallow中改变了这种行为。如果您查看Android 23中View.java
的源代码,可以看到他们在onVisibilityChanged
内向dispatchAttachedToWindow
添加了一个调用。
Here is the commit to AOSP where this change happened。
Here is the diff for that change。
鉴于您无法发布代码,我无法提供比将更改指向您更好的解决方案。
如果您尝试跟踪附加到窗口的视图,我建议使用onAttachedToWindow
API。
请注意,在Android 23中调用onVisibilityChanged
的方法很可能是dispatchAttachedToWindow
。此方法也称为onAttachedToWindow
,因此从理论上讲您可以侦听并手动检查可见性。
// Override inside your custom view
override fun onAttachedToWindow() {
super.onAttachedToWindow()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
// Check for visibility here, but note that onVisibilityChanged initially gets called with View.GONE
// Unless the view is inside of a ViewGroup. See the source code for ViewRootImpl.java for more details.
}
}
否则,您需要对Android 22及以下版本的逻辑进行特殊处理,以使您多听onWindowVisibilityChanged
而不是onVisibilityChanged
。