首先我们在平时开发中使用databinding的时候大部分都是在Activity或者fragment中,但我们一旦在自定义ViewGroup中使用的时候就会出现问题
问题描述:
我们在自定义LinearLayout中使用DataBinding的时候:
1:无法使用setContentView(Activity activity, int layoutId)
2:使用inflate(LayoutInflater inflater, int layoutId,@Nullable ViewGroup parent, boolean attachToParent)方法无效。
看代码
public TitleEditTextView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = inflate(context, R.layout.view_title_edit,this); mBinding = DataBindingUtil.bind(view); }
看似没什么问题,但一旦运行后就会发现会报错
意思也很简单,就是View is not a binding layout 没有绑定上view,这就很奇怪了,那怎么办?
解决方法:
打开这个目录,找到这个类打开
搜索到 ViewGroup绑定的R.layout.view_title_edit
这个里面有个判断条件就是 tag
那么我们就知道了其实我们缺少的是tag
tag要设什么也就清楚了
这是我们回到原来的地方
public TitleEditTextView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = inflate(context, R.layout.view_title_edit,this); //加上这一句,tag内容和上面的tag一样就可以了 view.setTag("layout/view_title_edit_0"); mBinding = DataBindingUtil.bind(view); }
再次运行程序就不会报错了。记录仅供参考。