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

Я планирую иерархию просмотра, как это:

enter image description here

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

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

Мой вопрос: как мне преодолеть разделение, обеспечиваемое навигационными контроллерами в Android Jetpack? Существует множество документов о том, как использовать общие Activity и т. Д. Для управления связью между Fragments, которые совместно используют один и тот же экран, но теперь появился новый Navigation Controller, который приносит новые абстракции, разъединяющие обработку Fragment, поэтому я Я не уверен в том, что делать дальше.

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

1 Ответ

0 голосов
/ 02 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...