x10*_*ion 4 android android-databinding android-viewmodel
当表单中的所有字段都完成时,我想启用 AppCompatButton。
我正在使用 ViewModel 并希望使用数据绑定来启用它。
当视图上的文本更改以更新视图模型中的对象数据时,我有两种方法会触发。
我遇到的问题是当两个字段都完成时,我需要在布局上启用一个按钮以允许它们继续。
一个例子是登录,当用户名和密码字段填满时,登录按钮变为启用。
小智 8
您可以使用与此处相同的解决方案
但是,如果您只想使用 AndroidArch 和 DataBinding,您可以创建自己的方法,如下所示:
class MyVM : ViewModel() {
...
val mLoginLiveData = MutableLiveData<String>()
val mPasswordLiveData = MutableLiveData<String>()
val mLoginPasswordMediator = MediatorLiveData<Boolean>()
...
init {
mLoginPasswordMediator.addSource(mLoginLiveData) { validateForm() }
mLoginPasswordMediator.addSource(mPasswordLiveData) { validateForm() }
...
}
private fun validateForm() {
// put your validation logic here, and update the following value
// as `true` or `false` based on validation result
// mLoginPasswordMediator.value = ...
}
override fun onCleared() {
// DO NOT forget to remove sources from mediator
mLoginPasswordMediator.removeSource(mLoginLiveData)
mLoginPasswordMediator.removeSource(mPasswordLiveData)
}
}
Run Code Online (Sandbox Code Playgroud)
在你的活动课上听你的MediatorLiveData:
class MyActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
//Obtain your ViewModel class here
//Initialize binding here
...
mBinding.lifecycleOwner = this
mVM.mLoginPasswordMediator.observe(this, Observer { validationResult ->
mBinding.yourButton.isEnabled = validationResult
})
}
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记使用您的LiveDatas' in 'your_activity_layout'.xml:
...
//Add your ViewModel class to layout here
<EditText
...
android:text="@={vm.mLoginLiveData}"
... />
...
<EditText
...
android:text="@={vm.mPasswordLiveData}"
... />
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |