我有一个订阅表格:姓名、地址、本地等等……我希望能够使用Data Binding
、处理和保存数据LiveData
。SavedStateHandle
让我们假设: 1 wayData Binding
和LiveData
SavedStateHandle
private val _name: MutableLiveData<Boolean> = stateHandle.getLiveData("_name", "")
val name: LiveData<String> = _name
fun onNameChanged(editable: Editable) {
_name.value = editable.toString()
}
<EditText
android:text="@{viewModel.name}"
android:afterTextChanged="@{viewModel::onNameChanged}"
...
/>
这行得通,但我认为我们可以做得更好:
@Parcelize class Form
封装所有字段2-way Data Binding
减少.xml
代码
现在问题开始出现。
如何通知我内部的变化Form class
以便能够坚持object
with SavedState
?尝试改进上面的代码或者2-way Data Binding
我们正在失去控制实际上有优势吗?我还使用一些逻辑来启用提交按钮,如下所示:
private val _name: MutableLiveData<String> = stateHandle.getLiveData("_name", "")
val name = _name.map { value -> {
updateUi()
return value}
}
private val _formValidLiveData = MutableLiveData<Unit>()
val submitEnable = _formValidLiveData.map { _ -> isFormValid() }
val submitAlpha = _formValidLiveData.map { _ -> if (isFormValid()) 1f else 0.5f }
...
private fun updateUi() {
_formValidLiveData.value = Unit
}
同样,随着2-way Data Binding
我失去控制,updateUi()
当EditText
字段发生变化时我怎么能打电话?
谢谢你的时间。