Sobes.tech
Junior — Middle

Cum se realizează schimbul de date între fragmente atunci când se utilizează FragmentManager?

sobes.tech AI

Răspuns de la AI

Обмен данными между фрагментами при использовании FragmentManager обычно осуществляется через активити, которое выступает посредником. Фрагменты не должны напрямую взаимодействовать друг с другом, чтобы сохранить слабую связанность.

Основные способы обмена данными:

  1. Через методы активити:

    • Фрагмент отправляет данные в активити (например, через интерфейс или прямой вызов метода).
    • Активити передаёт данные другому фрагменту, вызывая его публичные методы.
  2. Использование ViewModel с жизненным циклом активности:

    • Общая ViewModel позволяет фрагментам наблюдать за одними и теми же данными.
    • Изменения в ViewModel автоматически отражаются во всех подписанных фрагментах.
  3. Использование setFragmentResultListener и setFragmentResult (начиная с Fragment 1.3.0):

    • Фрагмент отправляет результат через FragmentManager.
    • Другой фрагмент слушает эти результаты и реагирует на них.

Пример с использованием setFragmentResult:

// Отправка результата из первого фрагмента
setFragmentResult("requestKey", bundleOf("dataKey" to "value"))

// В другом фрагменте слушаем результат
setFragmentResultListener("requestKey") { key, bundle ->
    val result = bundle.getString("dataKey")
    // обработка результата
}