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

2018-12-25  本文已影响0人  Weirm

前两天在实现一个简单的侧滑栏的时候,当子布局初始化之后,原本在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方法,想要知道为什么覆盖,可以自己去看下两者的源码。

上一篇下一篇

猜你喜欢

热点阅读