Будет ли общая ViewModel при использовании данных одного фрагмента в другом фрагменте при переходах

«Будет ли общая ViewModel при использовании данных одного фрагмента в другом фрагменте при переходах» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, общая ViewModel будет использоваться, если оба фрагмента находятся в пределах одного Activity. ViewModel хранится в Activity scope, поэтому фрагменты могут получить доступ к одной ViewModel через ViewModelProvider(requireActivity()).

Пример:

// В обоих фрагментах  
val sharedViewModel: SharedViewModel by activityViewModels()  

// SharedViewModel.kt  
class SharedViewModel : ViewModel() {  
    val sharedData = MutableLiveData<String>()  
}  

Нюансы:

  • Если фрагменты в разных Activity, ViewModel будет разной.
  • Не злоупотребляйте общей ViewModel, чтобы не создавать сильную связь между фрагментами.
  • Для навигации между фрагментами лучше использовать Navigation Component с Safe Args.