MVVM架构篇之databinding机制解析

databinding是google去年发布的一个库,它支持在xml中写表达式使得viewModel中的数据能够绑定到view中,目前已经支持双向绑定,也就是说数据的改变能够反馈到界面上,界面的数据也能够主动传到viewModel中。虽然我已经用这个库已经有4个月了,但是它的内在机制我一直没有去探寻,所以本片博客就是来深究databinding的运行机制。

1.了解 DataBindingUtil和DataBinderMapper

这是一个工具类主要就是帮助我们获取和生成View所对应的ViewDataBinding类。其中的方法分为以下几个种类

  • 1.inflate(LayoutInflater inflater, int layoutId,ViewGroup parent, boolean attachToParent)
    这个方法是将布局转化成一个ViewDataBinding,inflater和layoutId就不用说了。attachToParent表示是否将layoutId生成的View放入parent中。
  • 2.bind(View root)
    若我们已经得到了一个view并且其是由有databinding的xml文件生成的,那么我们就可以通过这个方法来获得ViewDataBinding,相当于上面一个方法的简化版。
  • 3.findBinding(View view)
    若一个view是一个使用过databinding的view的子view,那么我们就可以通过这个函数来寻找到其父view的ViewDataBinding。大家进入源代码中查看会发现,其内部只不过是通过while来不断的遍历当前view的父view来判断该父view是否绑定了ViewDataBinding。注意这个和前面的两个不同,这个方法的ViewDataBinding已经生成,本方法只不过是去找寻找而已
  • 4.getBinding(View view)
    这个方法和3一样也是去寻找已经生成的ViewDataBinding,不过这里的view就是已经使用过databing的view。
  • 5.setContentView(Activity activity, int layoutId)
    这个方法是将一个使用了databinding的view绑定到一个activity中去。其源码也很简单,先调用了该activity的setContentView(layoutId)。然后获取activity的decorView中的bodyView(我想了解activity绘制机制的同学应该了解这东西),将其作为该view的parent view。最终调用前面的bind()方法生成ViewDataBinding。
  • 6.getDataBinder(DataBindingComponent bindingComponent, View view, int layoutId)
    这个方法在自动生成的DataBinderMapper中,前面DataBindingUtil需要生成ViewDataBinding的方法最终都是调用了这个方法。这个方法通过layoutId找到需要生成的具体的ViewDataBinding类,然后调用ViewDataBinding的bind(view, bind
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值