美文网首页
在自定义ViewGroup中如何使用Databinding

在自定义ViewGroup中如何使用Databinding

作者: 葛糖糖 | 来源:发表于2018-10-08 19:16 被阅读0次

    今天在开发中需要自定义一个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)
    

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

    相关文章

      网友评论

          本文标题:在自定义ViewGroup中如何使用Databinding

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