我对 Transformations.map 的绑定似乎不起作用
My binding to a Transformations.map doesn't seem to be working
正在尝试将按钮的已启用 属性 绑定到 Transformations.map。我不知道为什么它不起作用。我相信我正在做与这个 Google 代码实验室完全相同的事情:https://codelabs.developers.google.com/codelabs/kotlin-android-training-quality-and-states/index.html?index=..%2F..android-kotlin-fundamentals#4
这是我得到的:
private val loginFormState = MutableLiveData<LoginFormState>()
private var _username = ""
var username
get() = _username
set(value) {
if(value == _username) return
_username = value
validateFormState()
}
private var _password = ""
var password
get() = _password
set(value) {
if(value == _password) return
_password = value
validateFormState()
}
init {
_busy.value = false
}
val loginButtonEnabled: LiveData<Boolean> = Transformations.map(loginFormState) { it.isDataValid }
private fun validateFormState() {
val formState = LoginFormState()
formState.isUsernameValid = username.isNotEmpty()
formState.isPasswordValid = password.isNotEmpty()
loginFormState.value = formState
}
...
...
<Button
android:enabled="@{loginViewModel.loginButtonEnabled}"
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginStart="48dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="48dp"
android:layout_marginBottom="64dp"
android:onClick="@{() -> loginViewModel.onLogin()}"
android:text="@string/action_sign_in"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password"
app:layout_constraintVertical_bias="0.2" />
...
非常感谢任何帮助!
所以我刚刚弄明白了。我不知道为什么会这样,因为其他绑定之前工作正常,但是通过设置:
binding.lifecycleOwner = this
它开始工作了。我最初没有设置它,因为我在 Activity 而不是 Fragment 中工作。如果有人知道为什么这使它起作用,将不胜感激!!
正在尝试将按钮的已启用 属性 绑定到 Transformations.map。我不知道为什么它不起作用。我相信我正在做与这个 Google 代码实验室完全相同的事情:https://codelabs.developers.google.com/codelabs/kotlin-android-training-quality-and-states/index.html?index=..%2F..android-kotlin-fundamentals#4
这是我得到的:
private val loginFormState = MutableLiveData<LoginFormState>()
private var _username = ""
var username
get() = _username
set(value) {
if(value == _username) return
_username = value
validateFormState()
}
private var _password = ""
var password
get() = _password
set(value) {
if(value == _password) return
_password = value
validateFormState()
}
init {
_busy.value = false
}
val loginButtonEnabled: LiveData<Boolean> = Transformations.map(loginFormState) { it.isDataValid }
private fun validateFormState() {
val formState = LoginFormState()
formState.isUsernameValid = username.isNotEmpty()
formState.isPasswordValid = password.isNotEmpty()
loginFormState.value = formState
}
...
...
<Button
android:enabled="@{loginViewModel.loginButtonEnabled}"
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginStart="48dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="48dp"
android:layout_marginBottom="64dp"
android:onClick="@{() -> loginViewModel.onLogin()}"
android:text="@string/action_sign_in"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password"
app:layout_constraintVertical_bias="0.2" />
...
非常感谢任何帮助!
所以我刚刚弄明白了。我不知道为什么会这样,因为其他绑定之前工作正常,但是通过设置:
binding.lifecycleOwner = this
它开始工作了。我最初没有设置它,因为我在 Activity 而不是 Fragment 中工作。如果有人知道为什么这使它起作用,将不胜感激!!