Можно ли использовать одну ViewModel для нескольких действий?

#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")
}
  

Более того, этот подход может помочь вам реализовать детализированную модель для широких экранов.

Следует отметить, что единая модель просмотра для разных типов просмотра (например, предварительный просмотр, редактирование) может быть сложнее в обслуживании, чем независимые модели просмотра для каждого вида.