Передача данных между фрагментом и BottomSheetDialogFragment
может быть эффективно организована с использованием Dagger
и Navigation Component
, избегая использования передачи данных чрез конструктор или интерфейс, а также SharedViewModel
и Hilt
. Данный подход позволяет сосредоточиться на интеграции зависимостей и управлении состоянием через стандартные инструменты.
В нашем примере ключевым компонентом является DaggerBottomSheetDialogFragment
, который обеспечивает внедрение зависимостей и управление состоянием, предоставляя гибкость и контроль над процессом.
Использование Dagger
в данном контексте дает возможность делать инъекции других классов, что открывает дополнительные возможности для расширения функциональности.
Передача данных
Передача данных между FirstFragment
и SecondBottomSheetFragment
осуществляется следующим образом:
-
Отправка данных:
FirstFragment
отправляет данные вSecondBottomSheetFragment
с помощью методаopenBottomFragment
. В этом методе задаются аргументы и используетсяfindNavController()
для навигации. -
Получение данных: Полученные значения из
SecondBottomSheetFragment
наблюдаются вobserveBackStack
и обновляются вFirstFragment
.
Рассмотрим пример, как это реализовано в коде:
Стоит учесть, что в данном примере метод openBottomFragment
использует проверку перед выполнением навигационного действия. Это необходимо, поскольку при быстром открытии или закрытии окон может возникнуть ошибка, связанная с некорректным состоянием навигации. Данная ошибка проявляется как исключение java.lang.IllegalArgumentException
, если NavController
пытается выполнить навигацию, когда текущее местоположение фрагмента не поддерживает переход.
Далее рассмотрим пример в SecondBottomSheetFragment
, где данные из FirstFragment
принимаются через initArgs
, который инициализирует ViewModel
. Обработанные данные затем отправляются обратно в FirstFragment
через метод sendDataToParentFragment
. Этот метод позволяет обновить пользовательский интерфейс в FirstFragment
, обеспечивая актуализацию на основе изменений, произошедших в SecondBottomSheetFragment
.
Данный пример демонстрирует, как использовать Dagger
и Navigation Component
для управления состоянием и передачи данных между фрагментами и BottomSheetDialogFragment
. Полный код доступен по ссылке на GitHub.
Автор: den4iccc