美文网首页
关于使用Databinding之后父布局被覆盖

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

作者: Weirm | 来源:发表于2018-12-25 13:20 被阅读0次

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

    相关文章

      网友评论

          本文标题:关于使用Databinding之后父布局被覆盖

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