Самый безопасный и рекомендуемый способ — использовать интерфейс-callback.
- Определить интерфейс в фрагменте.
kotlin
- Реализовать этот интерфейс в Activity.
kotlin
- Получить ссылку на 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 (для шаринга данных между фрагментами).