ObservableField <string>不更新?

时间:2019-05-08 17:28:27

标签: android android-mvvm

我正在尝试修改我的应用程序以使用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 个答案:

答案 0 :(得分:1)

如果您希望从EditTextemail字段中输入内容,则需要使用双向绑定...这意味着您需要使用=

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

现在,您正在使用单向绑定,该绑定将EditText的内容填充到email中,但不会随着用户的更改而更新email