Я экспериментирую с новыми компонентами архитектуры от Google, пытаясь получить более реактивный код, используя ViewModel
, LiveData
и DataBinding
.
В принципе, моя идея о ViewModel
состоит в том, чтобы иметь только одно полетипа Model
(пользователь для записи, так как мы представляем экранный профиль пользователя).Итак, мой ViewModel
класс:
class ViewModel : ViewModel() {
var model = MutableLiveData<User>()
, а мой Model
класс:
class User(var name: String, var lastName: String, var age: Int)
В моем файле макета я пытаюсь связать поля на моем Model
в вид, используя DataBinding
плагин.Проблема в том, что, поскольку у моего ViewModel
есть MutableLiveData<User>
, я не могу получить доступ (из привязки xml) к полям внутри класса User
(name, lastName ...).
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.github.andromedcodes.mvvmtutorial.ViewModel" />
</data>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="@{viewModel.user.name}"/>
</RelativeLayout>
</layout>
Возможно ли это сделать?И что лучше: иметь ViewModel
с отдельными полями (String, Int, Wh независимо ...) или повторно использовать Model
?