今天在开发中需要自定义一个ViewGroup,用来封装一个模块,但是在使用databinding的时候遇到了点问题,因此记录一下.
我们在平时开发中使用databinding的时候大部分都是在Activity或者fragment中,通过在Activity中调用
DataBindingUtil.setContentView(Activity activity, int layoutId)
或者fragment中调用
DataBindingUtil.inflate(LayoutInflater inflater, int layoutId,@Nullable ViewGroup parent, boolean attachToParent);
,但是自定义ViewGroup中如何使用呢?
当我在自定义ConstraintLayout中使用DataBinding的时候,发现不能使用setContentView()方法,那好吧我使用inflate总可以了吧,但是用了inflate之后却发现没有卵用,
mBinding = DataBindingUtil.inflate(
mLayoutInflater,
R.layout.lm_condition_holder,
this,
false
)
所以自定义ViewGroup压根不吃这套.
好,那就使用DatabindingUtil.bind(@NonNull View root)方法吧
var view = inflate(context, R.layout.lm_condition_holder, this@ConditionHolderView)
mBinding = DataBindingUtil.bind(view)
感觉这次稳了,但一运行后就发现又他妈的打脸了 意思是没有绑定上view,好吧goooooogle...
发现是在bind的时候需要设置tag,原因如下
到这里原因和解决方案就都有了,只需给View设置相应的tag就可以了.
var view = inflate(context, R.layout.lm_condition_holder, this@ConditionHolderView)
view.tag = "layout/lm_condition_holder_0"
mBinding = DataBindingUtil.bind(view)
再次运行程序就不会有问题了。希望对你有帮助。