Какие знаешь способы коммуникации между Fragment в одной Activity

«Какие знаешь способы коммуникации между Fragment в одной Activity» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Через Activity
    Фрагменты могут общаться через родительскую Activity, используя интерфейсы:
// Fragment A
(activity as? CallbackInterface)?.onEvent(data)

// Activity
override fun onEvent(data: Data) {
    fragmentB.updateData(data)
}
  1. ViewModel (рекомендуемый способ)
    Общая ViewModel в scope Activity:
val viewModel: SharedViewModel by activityViewModels()
viewModel.data.observe(viewLifecycleOwner) { data -> ... }
  1. SharedPreferences/Local DB
    Для простых данных, но не для частых обновлений.

  2. EventBus (Otto, GreenRobot)
    Устаревший подход, создает сильные связи.

  3. Fragment Result API (с AndroidX)

// Fragment A
setFragmentResult("requestKey", bundleOf("data" to value))

// Fragment B
childFragmentManager.setFragmentResultListener("requestKey") { _, bundle -> ... }