You can use the same solution like here
But if you want use only AndroidArch and DataBinding you can create your own approach like below:
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)
}
}
and in your activity class listen your 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
})
}
}
And didn't forget to use your LiveData
s' in 'your_activity_layout'.xml
:
...
//Add your ViewModel class to layout here
<EditText
...
android:text="@={vm.mLoginLiveData}"
... />
...
<EditText
...
android:text="@={vm.mPasswordLiveData}"
... />
...