Android:无法 enable/disable 带 ObservableBoolean 的按钮
Android: Unable to enable/disable Button with ObservableBoolean
ViewModel中有以下Observable变量
var isEmailValid = ObservableBoolean(false)
var isPasswordValid = ObservableBoolean(false)
并在某些条件下在 ViewModel 中设置值
fun validateUserInputs(email: Boolean, password: Boolean){
isEmailValid.set(email)
isPasswordValid.set(password)
}
最后,从XML布局访问如下:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.packageName.folder.ViewModel" />
</data>
...
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSubmit"
android:text="@string/sign_in"
android:enabled="@{viewModel.isEmailValid && viewModel.isPasswordValid? true: false}" />
...
</layout>
当两个 Observables 都设置为 true 时,按钮未启用。
也尝试了 viewModel.isEmailValid()
和 viewModel.isEmailValid()==true
选项。
--
在绑定 XMl 中访问上述变量的正确方法是什么?
我得到了答案。
binding.viewModel = viewModel
在 Activity 的 onCreate() 中丢失。
那么,下面就完成了与ViewModel的Databinding。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_abc)
binding.viewModel = viewModel
binding.lifecycleOwner = this
...
}
ViewModel中有以下Observable变量
var isEmailValid = ObservableBoolean(false)
var isPasswordValid = ObservableBoolean(false)
并在某些条件下在 ViewModel 中设置值
fun validateUserInputs(email: Boolean, password: Boolean){
isEmailValid.set(email)
isPasswordValid.set(password)
}
最后,从XML布局访问如下:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.packageName.folder.ViewModel" />
</data>
...
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSubmit"
android:text="@string/sign_in"
android:enabled="@{viewModel.isEmailValid && viewModel.isPasswordValid? true: false}" />
...
</layout>
当两个 Observables 都设置为 true 时,按钮未启用。
也尝试了 viewModel.isEmailValid()
和 viewModel.isEmailValid()==true
选项。
--
在绑定 XMl 中访问上述变量的正确方法是什么?
我得到了答案。
binding.viewModel = viewModel
在 Activity 的 onCreate() 中丢失。
那么,下面就完成了与ViewModel的Databinding。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_abc)
binding.viewModel = viewModel
binding.lifecycleOwner = this
...
}