Android进阶之路 - 全方位监听视图加载完成
关于监听视图加载完成的草稿已经放了很久,现在发现一晃眼竟然拖了这么多年才记录
你是如何判别当前组件视图是否加载完毕的? 有和我以前一样直接用 Activity、Fragment的 onResume 生命周期吗?
在我以往的项目实践中,有一些需求场景可供大家参考(操作不当,一般会报错(大致依托视图为空),导致程序崩溃)
- 进入某页面后,第一时间需要弹框
- 进入某页面后,根据某些视图的显示范围,做一些定制化页面显示
在不同组件中监听视图是否加载完成的方式可能稍有不同,以下会分别做单项介绍
-
- Activity、Fragment
-
- 对于特定的单 View
- 整体组件监听
- RecyclerView、ListView 等列表视图
-
- 基础方式
- 实战方式
- 自定义View
- WebView
在未掌握视图监听方式前,我惯性思维的在 Activity、Fragment
的 onResume
生命周期做了监听处理,但发现在部分场景还是会报错,所以 onResume
并不能代表当前视图已经绘制完毕!
onStart、onResume 这两个方法的执行,意味着视图是可见的;事实上,在这两个方法获取的信息都是0或负数,那就意味着,主线程还没有把界面绘制完毕,可能稍有延迟。
在不同组件中,监听视图加载完成状态大致相同,但又稍有不同,主要用到了俩种监听方式,自行选择即可
- 使用
ViewTreeObserver.OnGlobalLayoutListe