数据绑定 DataBinding

一: 在activity里

 binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        =
binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root)

二:在RecyclerView的onCreateViewHolder里,不能使用:

val binding = RecyclerViewItemBinding.inflate(layoutInflater)it didn't work

要使用:

val binding = DataBindingUtil.inflate<RecyclerViewItemBinding>(
                layoutInflater,
                R.layout.recycler_view_item,
                parent,
                false
            )

设置databinding的一般步骤:

  1. 添加依赖:
    plugins {
        ...
        id "kotlin-kapt"
    }
    android{
    ...
    dataBinding {
            enabled = true
        }
    }
    
  2. 创建想使用数据绑定的布局:
    <layout xmlns:android="http://schemas.android.com/apk/res/android"----------布局的最外面为layout标签,
        xmlns:tools="http://schemas.android.com/tools">
    
        <data>--------里面有个data标签
            <variable--------------要有个variable标签
                name="viewModel"----------使用的名字,第四步用到!!!!
                type="com.example.beatbox.SoundViewModel" />-----------引用第三步会实现的kotlin类
        </data>
        <Button
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:text="@{viewModel.title}"-----------可以使用viewmodel里的数据了,不用再在fragment或activity里指定
            android:onClick="@{()->viewModel.onButtonClick()}"--------------可以有lambda表达式
            tools:text="button"/>
    </layout>
    
  3. 创建kotlin的viewmodel
    class SoundViewModel{
        var sound:Sound? = null
        set(sound) {
            field = sound
        }
       
        val title:String?
        get() = sound?.name
    
        fun onButtonClick(){
            Log.d("SoundViewModel", "shit")
        }
    }
    
  4. 在activity或fragment加载出布局的时候,使用返回的binding:
    binding.viewModel = SoundViewModel()//viewmodel填在第二步中指定的名字
    
  5. 然后我们只要设置了binding的属性,布局就会跟着变化,数据绑定就是这么个回事。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值