我正在设置我的Edittext
并CheckBox
与我的视图模型挂钩。我已经在我的 ViewModel 上设置了变量,isActive
并且currentValue
我想将它们的值初始化为 xml,以便当用户到达 Fragment 时,当前值也设置为表单字段。
我已经尝试添加android:checked="@{viewModel.isActive}"
到CheckBox
和android:text="@{viewModel.currentValue}"
,EditText
但是它没有产生任何结果。
现在,我的解决方法是通过片段初始化表单字段值:
viewModel.isActive.observe(this, Observer {
it?.let {
binding.checkBox.isChecked = it
}
})
viewModel.currentValue.observe(this, Observer {
it?.let {
binding.editText.setText(it.toString())
}
})
这是我的代码:
ViewModel.kt
val isActive = Transformations.map(currentEntity) {
it.value?.isActive == 1
}
val currentValue = Transformations.map(currentEntity) {
it.value?.currentValue
}
private var currentEntity = MutableLiveData<Entity?>()
init {
initializeCurrentEntity()
}
private fun initializeCurrentEntity() {
uiScope.launch {
currentEntity.value = getCurrentEntityById(id)
}
}
layout.xml
<layout ...>
<data>
<variable name="viewModel"
type="com.example.app.ViewModel"/>
</data>
...
<com.google.android.material.textfield.TextInputLayout ... >
<com.google.android.material.textfield.TextInputEditText
...
android:text="@{viewModel.currentValue}"
...
/>
</com.google.android.material.textfield.TextInputLayout>
...
<CheckBox
...
android:checked="@{viewModel.isActive}" />
</layout>
我想要的结果是,当viewModel
已经初始化currentEntity
并更新了isActive
andcurrentValue
时,它也会反映在 xml.xml 中。我认为到目前为止的实际输出对于currentValue
和isActive