今天遇到一个问题,界面上需要根据自定义布局的行数来显示或者隐藏界面上
展开
这样一个按钮。但是在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之前的生命周期方法是无法直接获取到的。
解决方案
- 我在view中增加了一个回调函数。当view,onLayout()调用完成后,执行该回调方法。但是这样还是有一个问题
- 再回调函数中,直接操作view,有些操作不会生效
对TextView 的Visibility设置,我就失败了
。so,我放在了handle里,让他们自己搞定先后顺序。