美文网首页
this与baseContext之间不得不说的坑

this与baseContext之间不得不说的坑

作者: jeffrey12138 | 来源:发表于2020-11-06 15:25 被阅读0次

    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!!!程序完美运行,真棒!!!!

    相关文章

      网友评论

          本文标题:this与baseContext之间不得不说的坑

          本文链接:https://www.haomeiwen.com/subject/lkrtbktx.html