#android #viewmodel #android-architecture-components
#Android #viewmodel #android-архитектура-компоненты
Вопрос:
Я создаю приложение для управления работой и пытаюсь реализовать компоненты архитектуры Android. У меня есть одно действие для просмотра сведений о задаче, а затем несколько действий для редактирования этой задачи. Поскольку все данные во всех этих действиях будут одинаковыми, и эти действия будут часто открываться одно за другим с одними и теми же данными, можно ли мне использовать одну ViewModel для всех из них, или я должен создать отдельную ViewModel для всех них? Спасибо! 🙂
Комментарии:
1. Вы не сможете найти ViewModelStore, который имеет смысл использовать для совместного использования ViewModel, если, я думаю, вы не создадите его самостоятельно как одноэлементный, и в этом случае
onCleared()
этого никогда не произойдет.
Ответ №1:
Вы можете использовать модель общего представления активности для фрагментов. Например, у вас есть, ItemActivity
и в нем есть узлы ItemFragment
для предварительного просмотра элементов и ItemEditFragment
для редактирования. Вы можете получить модель представления уровня активности в onCreate()
обратном вызове фрагментов:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val vm = activity?.run {
ViewModelProviders.of(this).get(ItemViewModel::class.java)
} ?: throw Exception("Invalid Activity")
}
Более того, этот подход может помочь вам реализовать детализированную модель для широких экранов.
Следует отметить, что единая модель просмотра для разных типов просмотра (например, предварительный просмотр, редактирование) может быть сложнее в обслуживании, чем независимые модели просмотра для каждого вида.