JetPack之DataBinding的正确用法

JetPack之DataBinding的正确用法)

介绍

本篇文章主要用于讲述DataBinding中的一些坑,具体DataBinding的用法,详见官网

DataBinding之Fragment,RecylistView绑定无效问题

在Activity中,我们往往是使用setContentView方法,来获取binding,用法很简单,代码如下,第一个参数this传入了当前Activity,第二个参数传入了布局。

binding=DataBindingUtil.setContentView(this,R.layout.activity_second);

如此我们轻易的获取了对应的binding,可以愉快的在binding修改值,从而改变显示的View。
而在Fragment,RecylistView显然是无法使用setContentView的,而是通过inflate方法获取databing,官方介绍代码如下

    val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
    // or
    val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false) 

我们可以通过该方法得databing,然而此处官方代码却是缺失了在Fragment,RecylistView具体使用部分,在Fragment的onCreateView我们需要获取对应的View,一般我们很容易写下错误的代码,dataBindingview并不绑定,错误代码如下:

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view=inflater.inflate(R.layout.fragment_test,null)
        var binding=DataBindingUtil.inflate<FragmentTestBinding>(inflater,R.layout.fragment_test,null,false)

        return view
    }

在这段代码中,我们最终会发现,布局根本没有绑定。其实这也很好理解,我们从代码中可以看出,我们的View压根就没与binding产生任何的关联。正确的代码应该如下:

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val binding: FragmentTestBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_test, null, false)
        val view: View = binding.root
        return view
    }

我们可以从binding中获取对应的root,该root显然是一个与binding有关联的view,传递给fragmet。

除了使用inflate,DataBindingUtil还提供了另一个bind(view:View)方法来让我们绑定已知类型的DataBinding。代码如下:

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view=inflater.inflate(R.layout.fragment_test,null)
        var binding=DataBindingUtil.bind<FragmentTestBinding>(view)
        
        return view
    }

不过相对于inflate,bind要求指定返回的DataBinding的具体类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值