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