我知道Android MVVM,LiveData和DataBinding。但是,在这种情况下,我有许多输入UI字段,例如电子邮件,密码,确认密码等。我可以使用ViewModel映射这些字段。
public class LoginViewModel extends ViewModel {
public MutableLiveData<String> email = new MutableLiveData<>();
public MutableLiveData<String> password = new MutableLiveData<>();
.
.
.
}
我用以下XML布局将此LoginViewModel绑定了。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="loginViewModel"
type="viewModel.LoginViewModel" />
</data>
<RelativeLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".view.MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textEmailAddress"
android:text="@={loginViewModel.email}" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:ems="10"
android:inputType="textPassword"
android:text="@={loginViewModel.password}" />
</RelativeLayout>
</layout>
实际上,我有更多的UI字段,因此应该遵循哪种理想方法?是否基于我的UI在ViewModel中声明完全相同的LiveData。像10个UI字段在ViewModel中应该有10个LiveData。
答案 0 :(得分:0)
如果您的UI可以显示它,则视图模型应该公开10个数据字段(不要使UI过载)。 MVVM就是这样工作的。但!您应该根据字段行为公开不同类型的字段:
LiveData
用于只读字段(例如TextView
)MutableLiveData
用于可变字段,双向数据绑定(例如EditText
)LiveData
类型,用于恒定(只读)数据。如果您知道数据在视图模型生命周期中没有更改,则可以不使用LiveData
来公开数据。在这种情况下,设置视图模型变量时,数据将被绑定一次。