Как управлять Android MVVM, компонентом архитектуры Android (LiveData) с помощью DataBinding для многих полей пользовательского интерфейса? - PullRequest
0 голосов
/ 28 марта 2019

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

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

Я связал эту LoginViewModel с помощью следующего XMLlayout.

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

1 Ответ

0 голосов
/ 30 марта 2019

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

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