Как передавать события / данные между фрагментами вложенных контроллеров навигации
Я планирую Иерархию Представления как это:
По сути, основной фрагмент будет иметь возможность инициировать навигацию внутри контроллера навигации нижнего листа, фрагмент нижнего листа также сможет запускать навигации внутри контроллера навигации нижнего листа и отправлять события / данные в основной фрагмент.
Например, предположим, что основной фрагмент имеет сетку элементов, а фрагмент нижнего листа показывает детали последнего нажатого элемента. Пользователь может нажать кнопку внутри деталей в фрагменте нижнего листа, скажем, кнопку "Заказать сейчас", и теперь это событие должно быть перенесено в основной фрагмент. Пожалуйста, не придерживайтесь этого конкретного случая использования, это лишь пример, который я делаю, чтобы проиллюстрировать необходимость.
У меня вопрос, как я могу преодолеть разделение, обеспечиваемое навигационными контроллерами в Android Jetpack? Есть много документов о том, как использовать общий Activity
и т. д. для управления связью между Fragments
которые разделяют тот же экран, но теперь есть новый контроллер навигации, который приносит новые абстракции, развязывает Fragment
обработка, так что я не уверен, что делать дальше.
Я думал о том, возможно, используя Singleton
чтобы передать события / данные вокруг, может быть, с LiveData
внутри, но я думаю, что там могут быть более элегантные решения.
1 ответ
Решение с LiveData и ViewModel - это очень хорошее решение, MainFragment и BottomSheetFragment будут присоединены к одному и тому же экземпляру ViewModel. MainFragment будет наблюдать некоторый объект LiveData в ViewModel, и когда пользователь нажмет кнопку внутри деталей в фрагменте нижнего листа, объект LiveData в ViewModel будет изменен и MainFragment будет уведомлен.