Я читал много руководств о модели представления и живых данных, но на самом деле я не использую живые данные в классе модели представления в шаблоне mvvm. заранее спасибо.
Шаблон MVVM состоит только в том, чтобы говорить вниз V -> VM -> M и реагировать на M -> VM -> V. Это означает, что View может вызывать методы в ViewModel, но ViewModel не имеет ссылки на View для вызова методов. на нем (установочные данные). Способ связи ViewModel с представлением заключается в том, что представление наблюдает за некоторой переменной (ObservableField, LiveData, RxJava и т. д.).
LiveData — отличный наблюдаемый объект для обеспечения связи между ViewModel и View, особенно при изменении состояния, таком как вращение. Он также обеспечивает отличную связь между моделью и представлением в отношении изменений базы данных и помещения.
Согласно Google Docs, если вы уже используете такую библиотеку, как Rx или Agera, вы можете продолжать использовать их вместо LiveData. Но в этом случае вы несете ответственность за обработку выделения и отмены выделения объектов для каждого жизненного цикла компонентов Android.
При работе с шаблоном MVVM, поскольку модель представления не имеет ссылки на представление, вам понадобится наблюдаемый держатель данных для наблюдения за изменениями, чтобы вы могли правильно обновить свое представление.
В этом случае вы можете использовать живые данные, один из компонентов архитектуры или любой другой наблюдаемый объект, например, из Rx.
Основное отличие заключается в том, что livedata учитывает жизненный цикл Android, а наблюдаемые rx — нет.
С livedata не будет сбоев из-за остановленной активности при вызове onChange, поскольку он знает о жизненном цикле. Но без livedata вы должны справиться с этим делом.
Разработчики Android обычно используют ViewModel в качестве контейнера LiveData, подобного этому
class MyViewModel {
val myLiveData = MutableLiveData<String>()
}
Но почему бы нам не использовать класс String напрямую?
class MyViewModel {
val myString = "Hello"
}
Потому что мы хотим использовать шаблон Observer для String.
model.myLiveData.postValue("Echo")
model.myLiveData.observe(this, Observer {
// Show "Echo"
toast(it)
})
Зачем нам тогда ViewModel? Потому что мы хотим получить один и тот же экземпляр ViewModel (синглтон) в нашей активности или фрагменте.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(this)[MyViewModel::class.java]
viewModel.myLiveData.observe(this, Observer {
textView.text = it
})
Думаю, этого должно быть достаточно, чтобы увидеть разницу между ViewModel и LiveData.
Different between ViewModel with LiveData vs ViewModel Without LiveData?
Вам решать, нужны ли вам LiveData на ViewModel или нет?
i do not get actually use of livedata within viewmodel class in mvvm pattern.
Поняв разницу между ViewModel и LiveData, пожалуйста, прочитайте больше о шаблоне MVVM.
Модель просмотра в Model-View-View-Model отличается от ViewModel и LiveData Jetpack. Модель просмотра в MVVM — это концепция, вы можете создать свою собственную модель просмотра, используя обычный класс Java. Пока это соответствует поведению MVVM.
В простом формате livedata — это волшебный наблюдаемый класс держателя данных, который также учитывает жизненный цикл.
Если вы используете livedata внутри viewmodel:
setValue или postValue что-либо для livedata, и ваш пользовательский интерфейс сможет наблюдать значение, его изменения и отображать в пользовательском интерфейсе.dataBinding для лучшего подхода к наблюдению за livedata.
Если вам нужно наблюдать за состоянием объекта, вам нужен
LiveData. Нет никакой разницы, я думаю, все дело в требованиях и передовых методах.