Enable/Disable 来自 ViewModel 的登录按钮

Enable/Disable login button from ViewModel

伙计们,我的登录页面有 2 个编辑文本字段(用户名、密码)和 1 个按钮(提交)

我想在编写的内容都是 editText 时启用提交按钮。

我创建了两个 LiveData 变量

val _userName = MutableLiveData<String>()
val userName: LiveData<String>
    get() = _userName

val _password = MutableLiveData<String>()
val password: LiveData<String>
    get() = _password

这是我在 xml

中的提交按钮
<com.google.android.material.button.MaterialButton
            android:id="@+id/uSubmit"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="80dp"
            android:text="@string/log_in_button_text"
            android:enabled="@{authViewModel.isSubmitButtonEnabled()}"
            android:onClick="@{_ -> authViewModel.uUserLogin()}"
            android:clickable="false"
            app:layout_constraintEnd_toEndOf="@+id/passwordInputLayout"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/passwordInputLayout"
            app:layout_constraintTop_toBottomOf="@+id/passwordInputLayout" />

我尝试在 viewModel 中编写此代码以在用户名字段中写入内容时启用按钮

var isSubmitButtonEnabled = (Transformations.map(userName) {
            it.isNotEmpty()
        })

这很好用。现在我想在 userName 和 password 变量中都写入内容时启用按钮。我该怎么做?

不需要使用viewmodel来实现。您只需使用 xml + databinding 即可。

<com.google.android.material.button.MaterialButton
        android:id="@+id/uSubmit"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="@string/log_in_button_text"
        android:enabled="@{!PASSWORD_EDITTEXT_ID_IN_CAMEL_CASE.text.toString().isEmpty() &amp;& !USERNAME_EDITTEXT_ID_IN_CAMEL_CASE.text.toString().isEmpty()}"
        ... />