View 与 Activity 或者Fragment生命周期的关系

今天遇到一个问题,界面上需要根据自定义布局的行数来显示或者隐藏界面上展开这样一个按钮。但是在onCreate中获取不到自定义布局的行数一直是0,想想在onResume中应该能获取到了吧,这是不说是activity显示的时候回调的方法。我就理解为activity已经在后台绘制完成,仅仅只是转换到在前台展示(类似双缓存),然后我发现我错了。。。。

各个生命周期的调用顺序

Activity Layout View
1 onCreate - -
2 onStart - -
3 onResume - -
4 - onMeasure -
5 - - onMeasure
6 - onMeasure -
7 - - onMeasure
8 - onLayout -
9 - - onLayout
10 - onMeasure -
11 - - onMeasure
12 - onMeasure -
13 - - onMeasure
14 - onLayout -
15 - - onLayout
16 - - onDraw
17 onPause - -
18 onStop - -
19 onDestory - -

所以我在去自定义的View时候,一些在onMeasure或者onLayout,这些view的生命周期方法赋值的成员变量,直接在onPause之前的生命周期方法是无法直接获取到的。

解决方案

  1. 我在view中增加了一个回调函数。当view,onLayout()调用完成后,执行该回调方法。但是这样还是有一个问题
  • 再回调函数中,直接操作view,有些操作不会生效对TextView 的Visibility设置,我就失败了。so,我放在了handle里,让他们自己搞定先后顺序。

demo

你可能感兴趣的:(View 与 Activity 或者Fragment生命周期的关系)