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