Kotlin中关于DataBinding

本文详细介绍了Android Data Binding库的使用,包括视图可见性绑定、点击事件监听、数据单向和双向绑定。通过示例展示了如何根据数据变化更新UI,如使用`android:visibility`根据条件隐藏/显示视图,以及如何在XML中设置点击事件。同时,文章提到了数据模型的创建与更新,以及如何在UI中响应数据变化。此外,还讨论了在Data Binding中调用类方法、处理逻辑运算符以及常量与变量组合绑定的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android:visibility 可见性绑定和onClick绑定

 <data>
        <import type="android.view.View"/>
        <variable
            name="data"
            type="com.x.x.x.Bean" />
        <variable
            name="listener"
            type="android.view.View.OnClickListener" />
    </data>
    
    
    <!--要在data节点下引入view-->
     android:visibility="@{data.isCharge ? View.VISIBLE: View.GONE}">

数据单向绑定的问题(数据改变更改视图)

binding中的数据data类对应的JavaBean类bean,bean的属性修改后重新赋值给binding,就可以通知UI更改绑定的视图,实现数据和视图的动态绑定

  bean = xxBean("数据绑定",false) 
  mBinding.data = bean //javabean的值更改,视图层UI也就是xml文件中引用data的地方也随之修改
  
  • 数据承载类
open class BaseDto : Serializable {
}

data class SupportCodeDes(
    var codeList:List<String>? = arrayListOf()
):BaseDto()

  • model层获取数据
var codeList:MutableLiveData<SupportCodeDes> = MutableLiveData()

   fun getSupportCode(){
        var list = VehicleConfig.getAllFunction()
        var supportCodeDes = SupportCodeDes(list)
        codeList.postValue(supportCodeDes)
    }
  • UI调用方法
 override fun initData() {
        mModel.getSupportCode()
        mModel.codeList.observe(this, Observer {
            logE("更新UI ${it.codeList}")
            mBinding.code = it
        })
    }
  • xml中更新UI
   <data>
        <import type="android.view.View" />
        <variable
            name="listener"
            type="android.view.View.OnClickListener" />
        <variable
            name="code"
            type="com.beans.vehicle.dto.SupportCodeDes" />
    </data>
    
 <LinearLayout
            android:id="@+id/ll_find_car"
            android:onClick="@{listener}"
            android:visibility="@{code.codeList.contains(`1-1-3`)==true?View.VISIBLE:View.GONE}"
            style="@style/RemoteShowLineCenter">

点击事件监听

  mBinding.listener = View.OnClickListener {
            when(it.id){
                R.id.tv_temperature -> showAirControlDialog()
            }
        }

数据双向绑定问题

数据改变时同时使视图刷新,例如EditText的绑定
绑定变量的方式比单向绑定多了一个等号:android:text="@={user.name}"

<data>
        <variable name="userInfo" type="com.github.ixiaow.sample.model.ObservableUser"/>
    </data>
<EditText
                app:layout_constraintVertical_chainStyle="spread"
                android:id="@+id/mUserName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@={userInfo.name, default=`name`}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>

当 EditText的输入内容改变时,会同时同步到变量 user

调用类中的方法::

 android:onClick="@{onClickUtil::onClickWithMe}"

Unresolved reference: BR

手动导入BR

  • import com.xx.xx.BR

常量值和变量组合绑定

 android:text="@{`您的爱车`+myData.licenseNumber+`非常健康,继续保持哦`}"

databinding中使用逻辑与运算符&&

'&' --> '&amp;'

'<' --> '&lt;'

'>' --> '&gt;'


android:visibility="@{data.isOwner()==true &amp;&amp; data.isDefault()==false ? View.VISIBLE:View.GONE}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值