https://www.jianshu.com/p/3c87d8b89665(《kotlin-转场动画基础》地址)
在上一个《kotlin-转场动画基础》的文章中遇到了一个坑,就是我在使用
mOverViewScene =
Scene.getSceneForLayout(sceneRoot, R.layout.scene_overview, baseContext)
去设置场景的时候,发现没有办法使用布局中的控件,一直显示
IllegalStateException异常
java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.ImageButton with id 'btnInfo'
后来研究了下,发现我使用的baseContext一直传入的是个null,我心想这是什么鬼情况,后来深入代码一看,哦豁,原来如此,点进去看baseContext
image.png
emmm,这个ContextWrapper类不就是妥妥Context的代理类么,全是靠mBase这个变量在执行,所以出现空值,应该是这个变量的问题,然后继续追ContextWrapper(),在Application()中的构造方法中看到
image.png
emmm,传入个空值??
好吧继续追,Instrumentation中的
image.png
这Instrumentation是啥?勤劳的小手在谷歌上疯狂敲打,哦!原来实际上当启动一个app的时候都会实例化一个Instrumentation对象,且Instrumentation在每个Activity跳转的时候都会用到且其内部类ActivityMonitor会监控activity的,,只是我们不直接使用它;另外Activity的生命周期方法也是通过它来调用的
那就是说我从一开始就传入一个null给baseContext,所以我引用的时候,才会一直异常报错,原来如此,那我直接使用一个明确的context对象不就好了么?
mOverViewScene =
Scene.getSceneForLayout(sceneRoot, R.layout.scene_overview, this)
mInfoScene = Scene.getSceneForLayout(sceneRoot, R.layout.scene_info, this)
ok!!!程序完美运行,真棒!!!!
网友评论