Как стать автором
Обновить

Передача данных между фрагментом и BottomSheetDialogFragment с использованием Dagger и Navigation Component

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров1.1K

Передача данных между фрагментом и BottomSheetDialogFragment может быть эффективно организована с использованием Dagger и Navigation Component, избегая использования передачи данных чрез конструктор или интерфейс, а также SharedViewModel и Hilt. Данный подход позволяет сосредоточиться на интеграции зависимостей и управлении состоянием через стандартные инструменты.


В нашем примере ключевым компонентом является DaggerBottomSheetDialogFragment, который обеспечивает внедрение зависимостей и управление состоянием, предоставляя гибкость и контроль над процессом.

Использование Dagger в данном контексте позволяет выполнять инъекции зависимостей, что открывает возможности для расширения функциональности. В случаях, когда требуется внедрение зависимостей в BottomSheetDialogFragment и другие компоненты приложения, Dagger помогает поддерживать архитектурную чистоту и гибкость.

Передача данных

Передача данных между FirstFragment и SecondBottomSheetFragment организована с акцентом на двунаправленную передачу данных следующим образом:

  • Отправка данных: FirstFragment отправляет данные в SecondBottomSheetFragmentс помощью метода openBottomFragment. В этом методе задаются аргументы и используется findNavController() для навигации.

  • Получение данных: Полученные значения из SecondBottomSheetFragment наблюдаются в observeBackStack, где используется currentBackStackEntryFlow для отслеживания изменений состояния в навигационном стеке с последующим обновлением данных во ViewModel.

Рассмотрим пример, как это реализовано в коде:

Стоит учесть, что в данном примере метод openBottomFragment использует проверку перед выполнением навигационного действия. Это необходимо, поскольку при быстром открытии или закрытии окон может возникнуть ошибка, связанная с некорректным состоянием навигации. Данная ошибка проявляется как исключение java.lang.IllegalArgumentException, если NavController пытается выполнить навигацию, когда текущее местоположение фрагмента не поддерживает переход.

Далее рассмотрим пример в SecondBottomSheetFragment, где данные из FirstFragment принимаются через initArgs, который инициализирует ViewModel. Обработанные данные затем отправляются обратно в FirstFragment через метод sendDataToParentFragment. Этот метод позволяет обновить пользовательский интерфейс в FirstFragment, обеспечивая актуализацию на основе изменений, произошедших в SecondBottomSheetFragment.


Данный пример демонстрирует, как использовать Dagger и Navigation Component для управления состоянием и передачи данных между фрагментами и BottomSheetDialogFragment. Полный код доступен по ссылке на GitHub.

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+8
Комментарии0

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн