Как управлять Android MVVM, компонентом архитектуры Android (LiveData) с привязкой данных для многих полей пользовательского интерфейса?

Я знаю Android MVVM, LiveData и DataBinding. Но у меня есть сценарий, в котором у меня есть много полей ввода пользовательского интерфейса, таких как электронная почта, пароль, подтверждение пароля и т. д. Я могу сопоставить эти поля с ViewModel.

public class LoginViewModel extends ViewModel {
        public MutableLiveData<String> email = new MutableLiveData<>();
        public MutableLiveData<String> password = new MutableLiveData<>();
        .
        .
        .
}

Я связал этот LoginViewModel со следующим XML-макетом.

<?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>

На самом деле, у меня больше полей пользовательского интерфейса, так какой идеальный подход я должен использовать? Нужно ли объявлять точно такие же LiveData в ViewModel на основе моего пользовательского интерфейса. Например, 10 полей пользовательского интерфейса должны иметь 10 LiveData во ViewModel.


person Bhavin Shah    schedule 28.03.2019    source источник
comment
перейдите по этой ссылке, это поможет мне medium.com/halcyon -мобильный/   -  person Aravind V    schedule 28.03.2019
comment
@AravindV Спасибо за эту ссылку. На самом деле я знаю LiveData и Databinding. Ваша ссылка не передает ответ на мой вопрос.   -  person Bhavin Shah    schedule 28.03.2019


Ответы (1)


Ваша модель представления должна отображать 10 полей данных, если ваш пользовательский интерфейс может это отображать (не перегружайте пользовательский интерфейс). Так работает MVVM. Но! Вы должны отображать разные типы полей в зависимости от поведения поля:

  • LiveData для полей только для чтения (например, TextView)
  • MutableLiveData для изменяемых полей, двусторонняя привязка данных (например, EditText)
  • не LiveData тип для постоянных (только для чтения) данных. Если вы знаете, что данные не изменились в течение жизненного цикла модели представления, вы можете предоставить данные без LiveData. В этом случае ваши данные будут привязаны один раз при настройке переменной модели представления.
person XIII-th    schedule 30.03.2019