ObservableField <String>Не обновляется? - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь изменить свое приложение для использования MVVM.Прямо сейчас я пытаюсь создать простую страницу «сброса пароля», для которой я пытаюсь получить значение текстового поля: поля адреса электронной почты.К сожалению, мое поле электронной почты по-прежнему выходит пустым.Модель представления работает так, как я могу правильно обращаться к onResetPassword.

Любая помощь будет оценена.

ForgotPasswordViewModel.java

public class ForgotPasswordViewModel extends ViewModel {

    public final ObservableField<String> email = new ObservableField<>();

    public void onResetPassword() {
        Log.i("PASSWORD", "xxx -> " + email.get());
    }
}

activity_forgot_password.xml

<data>
    <variable
        name="viewModel"
        type="com.example.foo.viewModels.ForgotPasswordViewModel" />
</data>

<RelativeLayout
    android:id="@+id/loginLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.LoginActivity">


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="15dp">


                <EditText
android:inputType="textEmailAddress|textNoSuggestions"
                    android:text="@{viewModel.email}"
                    android:hint="@string/email" />
                <Button
                    android:text="Login"
                    android:onClick="@{(v) -> viewModel.onResetPassword()}" />
            </LinearLayout>
    </RelativeLayout>
</layout>

1 Ответ

1 голос
/ 08 мая 2019

Если вы хотите получить данные из EditText в поле email, вам нужно использовать двустороннюю привязку ... что означает, что вам нужно =:

android:text="@={viewModel.email}"

В данный момент вы используете одностороннюю привязку, которая заполняет EditText содержимым email, но не обновляет email при любых пользовательских изменениях.

...