如何通过许多UI字段的DataBinding管理Android MVVM,Android体系结构组件(LiveData)?

时间:2019-03-28 10:58:49

标签: android mvvm android-databinding android-livedata

我知道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。

1 个答案:

答案 0 :(得分:0)

如果您的UI可以显示它,则视图模型应该公开10个数据字段(不要使UI过载)。 MVVM就是这样工作的。但!您应该根据字段行为公开不同类型的字段:

  • LiveData用于只读字段(例如TextView
  • MutableLiveData用于可变字段,双向数据绑定(例如EditText
  • LiveData类型,用于恒定(只读)数据。如果您知道数据在视图模型生命周期中没有更改,则可以不使用LiveData来公开数据。在这种情况下,设置视图模型变量时,数据将被绑定一次。