关于使用Databinding之后父布局被覆盖

前两天在实现一个简单的侧滑栏的时候,当子布局初始化之后,原本在BaseActivity中写的父布局被遮挡了,一开始就看了,自己并没有在MainActivity中setContentView,经过debug时候,发现是Databinding的原因,下面来分析原因。


fun initdata() {

    //初始化viewmodel

    mViewModel = findViewModel(MainActivityViewModel::class.java)

    //初始化databinding

    mBinding = DataBindingUtil.setContentView(this, R.layout.main_activity)

}

错误就是出现在DataBindingUtil的setContentView那里,ok,我们去看一下源码干了些什么。


public static T setContentView(@NonNull Activity activity,

        int layoutId, @Nullable DataBindingComponent bindingComponent) {

    activity.setContentView(layoutId);

    View decorView = activity.getWindow().getDecorView();

    ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content);

    return bindToAddedViews(bindingComponent, contentView, 0, layoutId);

}

???

找到原因了,我自己没有在MainActivity中setContentView,Databingding帮我setContentView了,所以不能用这个方法了,下面解决方案。


fun initdata() {

    //初始化viewmodel

    mViewModel = findViewModel(MainActivityViewModel::class.java)

//初始化databinding

    /*mBinding = DataBindingUtil.setContentView(this, R.layout.main_activity)*/

mBinding=DataBindingUtil.inflate<MainActivityBinding(layoutInflater,getLayoutId(),mContextView,false)

}

ok,问题解决,主要是inflate和setContentView,就是activity的setContentView和LayoutInflater的inflate方法,想要知道为什么覆盖,可以自己去看下两者的源码。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容