Популярным вариантом сейчас является сохранение данных в ViewModel , которые могут совместно использоваться несколькими действиями / фрагментами.
Из документации:
Этот подход предлагает следующие преимущества:
- Деятельности не нужно ничего делать или знать что-либо об этом
коммуникации.
- Фрагменты не должны знать друг о друге, кроме
контракт SharedViewModel. Если один из фрагментов исчезает,
другой продолжает работать как обычно.
- Каждый фрагмент имеет свой собственный жизненный цикл, и на него не влияет жизненный цикл другого. Если один фрагмент
заменяет другой, пользовательский интерфейс продолжает работать без проблем.
Хороший пример также можно найти в документации:
class SharedViewModel : ViewModel() {
val selected = MutableLiveData<Item>()
fun select(item: Item) {
selected.value = item
}
}
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
class DetailFragment : Fragment() {
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
model.selected.observe(this, Observer<Item> { item ->
// Update the UI
})
}
}