Моя привязка к Transformations.map не работает - PullRequest
0 голосов
/ 14 февраля 2020

Попытка привязать включенное свойство кнопки к Transformations.map. Я не могу понять, почему это не работает. Я считаю, что я делаю то же самое, что и в этой лаборатории Google Code: 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" />
...

Любая помощь с благодарностью!

1 Ответ

1 голос
/ 14 февраля 2020

Так что я просто понял это. Я не знаю, почему это работает, потому что другие привязки работали раньше просто отлично, но установив:

binding.lifecycleOwner = this

Это начало работать. Я не установил это первоначально, потому что я работал в Деятельности а не Фрагменте. Если кто-нибудь знает, почему это заставляет его работать, комментарий будет с благодарностью !!

...