【已解决】 databinding include 获取不到值
主View
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="layout"
type="com.sh.wandroid.text.LoginViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
tools:context=".text.LoginActivity"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/title1"
layout="@layout/view_tile1"
app:title = "@{layout.titleVm}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
include view
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.text.TextUtils"/>
<variable
name="title"
type="com.sh.wandroid.base.TitleVM" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="@{TextUtils.isEmpty(title.MTitle)?`null`:`not null`}"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
j结果显示 null
viewmodel
class LoginViewModel(app:Application):BaseViewModel(app) {
val titleVm= TitleVM(
title = "登录"
)
}
123
TitleVM
class TitleVM(
var leftText: String? = "",
var leftDrawable: Drawable? = R.drawable.abc_vector_test.getDrawable(),
var leftClick: (() -> Unit)? = null,
var title: String? = "321",
var rightText: String? = "",
var rightDrawable: Drawable? = null,
var rightClick: (() -> Unit)? = null,
var background: Int = R.color.colorAccent.getResColor()
) : ViewModel() {
init {
println("title====$title")
}
val mTitle = ObservableField<String>(title)
val mRightDrawable = ObservableField(rightDrawable)
}
绑定
private fun initVM() {
val vm = getViewModel()
val factory = ViewModelProvider.AndroidViewModelFactory(application)
mViewModel = ViewModelProvider(this,factory)[vm::class.java]
//每个布局都需要传入一个viewmodel
binding.setVariable(BR.layout, mViewModel)
//不添加 livedata观察不到数据变化
binding.lifecycleOwner = this
}
找到原因了 因为这句
binding.setVariable(BR.layout, mViewModel)
这个BR类是我自己创建的,结果setVariable 方法里对这个参数由校验,校验不过,就不会往xml赋值
这个BR以前每注意,怎么生成的?干啥用的?