我正在学习如何使用MVVM进行开发。我创建了一个小示例,如下代码所示。 我想在单击UI按钮时更改TextView的值。最初,TextView设置为空String。
在xml文件中,TextView UI绑定到Viewmodel中的变量“结果”,最初,此变量“结果”设置为“”。我想做的是,当用户单击按钮时,该变量 “结果”将具有另一个值,我想将此值设置为TextView。
请让我知道如何实现。
xml
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/tools">
<data>
<!-- the class the behaves as Viewmodel and contains the @Bindable Object-->
<variable
name="vm1"
type="com.example.amrbakri.mvvm_02.LoginViewModel1" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/actMain_LoginViewModel1_tv_results"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:text="@{vm1.result}"
/>
</LinearLayout>
</layout>
视图模型
public class LoginViewModel1 extends BaseObservable {
private final static String TAG = LoginViewModel1.class.getSimpleName();
private final static String MSG_ON_OBSERVATION_RESULTS_SUCCESSFUL = "observation results successful";
private final static String MSG_ON_OBSERVATION_RESULTS_FAILED = "observation results failed";
private String mUserId = null;
private String mUserPass = null;
private UserModel mUserModel = null;
public String result = " ";
public LoginViewModel1() {
this.mUserModel = new UserModel("", "");
}
public void onLoginUser1Clicked() {
Log.d(TAG, "onLoginUser1Clicked");
this.result = "result";
Log.d(TAG, "onLoginUser1Clicked result: " + this.result);
}
}
答案 0 :(得分:0)
使用 DataBinding 而没有任何ObservableField
或LiveData
即notifyPropertyChanged(BR.vm1))
。
做类似的事情:
public void onLoginUser1Clicked() {
Log.d(TAG, "onLoginUser1Clicked");
this.result = "result";
Log.d(TAG, "onLoginUser1Clicked result: " + this.result);
notifyPropertyChanged(BR.vm1)); // This will notify data and update UI.
}