Middle
47
questionbank

Как организовать взаимодействие между Activity и фрагментом?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Самый безопасный и рекомендуемый способ — использовать интерфейс-callback.

  1. Определить интерфейс в фрагменте.
    kotlin
  2. Реализовать этот интерфейс в Activity.
    kotlin
  3. Получить ссылку на Activity в фрагменте и вызвать метод интерфейса. Желательно делать это в onAttach().
    kotlin

Альтернативные способы:

  • ViewModel: Используется для шаринга данных между фрагментами, связанных с общим Activity.
    kotlin
  • Navigation Component SAFE args: Передача данных между фрагментами через аргументы навигации. Фрагмент получает данные из arguments, не зная об Activity.
  • Локальные широковещательные рассылки (Local BroadcastManager): Устаревший способ, но может использоваться для простых уведомлений. Не рекомендуется для передачи сложных объектов.
  • Прямой вызов методов: Фрагмент получает ссылку на Activity и напрямую вызывает его публичные методы. Плохая практика, нарушает инкапсуляцию и затрудняет тестирование.

Сравнительная таблица:

МетодБезопасность/ЧистотаПростота реализацииИспользование
Интерфейс-callbackВысокаяСредняяФрагмент -> Activity
ViewModelВысокаяВысокая (с ViewModel)Фрагмент <=> Фрагмент
Navigation SAFE argsВысокаяВысокаяФрагмент -> Фрагмент
Local BroadcastСредняяСредняяФрагмент -> Activity
Прямой вызовНизкаяВысокаяФрагмент -> Activity

Наиболее часто используемые методы в современной разработке — интерфейс-callback (для связи фрагмента с его хостом) и ViewModel (для шаринга данных между фрагментами).