在自定义ViewGroup中如何使用Databinding

今天在开发中需要自定义一个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,原因如下

在build目录中,找到这个类打开
cmd+f 定位ViewGroup绑定的R.layout.xxx

到这里原因和解决方案就都有了,只需给View设置相应的tag就可以了.
var view = inflate(context, R.layout.lm_condition_holder, this@ConditionHolderView)
view.tag = "layout/lm_condition_holder_0"
mBinding = DataBindingUtil.bind(view)

再次运行程序就不会有问题了。希望对你有帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容