【发布时间】:2021-05-30 17:32:23
【问题描述】:
我正在学习 MVVM,但我对绑定活动及其视图感到困惑。
在数据绑定课程中,它说,我需要
binding = DataBindingUtil.bind(view) // binding is in the field.
但是 MVVM 课程,它说,我需要
MainActivityBinding.inflate(layoutInflater).also{
binding = it // binding is in the field
setContentView(it.root)
}
我正在使用第二个,而 XML 中的 daat 绑定表达式不起作用。 我不知道这是否是一个很好的访问,但我正在尝试从 ViewModel 类中获取数据。
所以,我所做的是,
<layout>
<data>
<variable
name="viewModel"
type="com.example.my_app.ui.main.MainViewModel"/>
</data>
<TextView
android:text="@{viewModel.user.name}"
/>
<TextView
android:text="@{viewModel.getUserHeight()}
/>
</layout>
ViewModel 是
class MainViewModel(
a: UserData,
): ViewModel() {
private val _userData = MutableLiveData<UserData>()
val userData: LiveData<UserData>
get() = _userData
init {
_userData.value = a
Log.i("view-model", "${_userData.value?.name}")
}
fun getUserHeight():String{
return "${a.value.height}cm"
}
override fun onCleared() {
super.onCleared()
Log.i("view-model", "MainViewModel destroyed")
}
}
它不起作用。请您解释一下哪一部分不正确?
【问题讨论】:
-
确保提供 viewModel 引用来绑定
binding.setViewModel(viewModel) -
好吧,我愿意
viewModel = ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)。它有什么问题吗? @JaiprakashSoni
标签: android viewmodel android-databinding