gpt4 book ai didi

android - 当所有 EditText 完成时启用按钮

转载 作者:行者123 更新时间:2023-11-29 16:32:05 28 4
gpt4 key购买 nike

我想在表单中的所有字段都完成后启用 AppCompatButton。

我正在使用 ViewModel 并想使用数据绑定(bind)来启用它。

我有 2 个方法在 View 上的文本更改时触发以更新 View 模型中的对象数据。

我遇到的问题是当两个字段都完成时,我需要在布局上启用一个按钮以允许它们继续。

一个例子是登录,当用户名和密码字段被填满时,登录按钮将被启用。

最佳答案

您可以使用与 here 相同的解决方案

但如果您只想使用 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)
}
}

并在您的 Activity 类中收听您的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
})
}
}

不要忘记在 'your_activity_layout'.xml 中使用您的 LiveData:

...
//Add your ViewModel class to layout here
<EditText
...
android:text="@={vm.mLoginLiveData}"
... />
...
<EditText
...
android:text="@={vm.mPasswordLiveData}"
... />
...

关于android - 当所有 EditText 完成时启用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437420/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com