Как передавать события / данные между фрагментами вложенных контроллеров навигации

Я планирую Иерархию Представления как это:

введите описание изображения здесь

По сути, основной фрагмент будет иметь возможность инициировать навигацию внутри контроллера навигации нижнего листа, фрагмент нижнего листа также сможет запускать навигации внутри контроллера навигации нижнего листа и отправлять события / данные в основной фрагмент.

Например, предположим, что основной фрагмент имеет сетку элементов, а фрагмент нижнего листа показывает детали последнего нажатого элемента. Пользователь может нажать кнопку внутри деталей в фрагменте нижнего листа, скажем, кнопку "Заказать сейчас", и теперь это событие должно быть перенесено в основной фрагмент. Пожалуйста, не придерживайтесь этого конкретного случая использования, это лишь пример, который я делаю, чтобы проиллюстрировать необходимость.

У меня вопрос, как я могу преодолеть разделение, обеспечиваемое навигационными контроллерами в Android Jetpack? Есть много документов о том, как использовать общий Activity и т. д. для управления связью между Fragments которые разделяют тот же экран, но теперь есть новый контроллер навигации, который приносит новые абстракции, развязывает Fragment обработка, так что я не уверен, что делать дальше.

Я думал о том, возможно, используя Singleton чтобы передать события / данные вокруг, может быть, с LiveData внутри, но я думаю, что там могут быть более элегантные решения.

1 ответ

Решение с LiveData и ViewModel - это очень хорошее решение, MainFragment и BottomSheetFragment будут присоединены к одному и тому же экземпляру ViewModel. MainFragment будет наблюдать некоторый объект LiveData в ViewModel, и когда пользователь нажмет кнопку внутри деталей в фрагменте нижнего листа, объект LiveData в ViewModel будет изменен и MainFragment будет уведомлен.