文章目录
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中使用逻辑与运算符&&
'&' --> '&'
'<' --> '<'
'>' --> '>'
android:visibility="@{data.isOwner()==true && data.isDefault()==false ? View.VISIBLE:View.GONE}"