ObservableField<String> 没有更新?

ObservableField<String> Not Updating?

我正在尝试修改我的应用程序以使用 MVVM。现在,我正在尝试创建一个简单的 "password reset" 页面,我试图为其获取文本字段的值:电子邮件地址字段。不幸的是,我的电子邮件字段仍然为空。视图模型可以正常工作,因为我可以正确访问 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>

如果您希望将 EditText 的输入输入到 email 字段,您需要使用 two-way 绑定...这意味着您需要一个 =:

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

现在,您正在使用 one-way 绑定,它用 email 的内容填充 EditText,但不会随着任何用户更改更新 email .