Связь между дочерним фрагментом и родителем при нажатии родительской кнопки

#android #android-fragments #viewmodel #android-navigation #fragmentmanager

Вопрос:

У меня есть родитель Fragment , у которого внутри FragementContainerView есть, в котором происходит переход разных фрагментов. У родительского фрагмента есть кнопка, при нажатии на которую он должен собирать все данные из разных дочерних фрагментов внутри представления контейнера. Я использую Navigation компонент и FragmentResultAPI , первый для навигации/перехода по фрагментам и последний для получения результатов от детей к родителю. Я знаю, как вернуть данные от детей родителю, но я не знаю, как уведомить детей об отправке данных обратно. Я нашел это:

 View view = inflater.inflate(R.layout.parent_fragment, container, false);
MyFirstChildFragment fragment = (MyFirstChildFragment) getChildFragmentManager().findFragmentById(R.id.child_fragment_id);
fragment.heyChildrenGiveMeYourDataBack(); //on Button click listener
 

Я знаю, что это традиционный способ, но мне было интересно, есть ли более современный способ или, назовем его навигационным способом.

Родительский фрагмент принадлежит тому main_graph_nav , но все дочерние элементы принадлежат другому nested_graph_nav . Поэтому у меня есть возможность ViewModel обмениваться данными между детьми, но я все еще не знаю, как уведомить детей об отправке данных обратно родителю.

Комментарии:

1. Рассмотрите возможность использования шины событий. greenrobot.org/eventbus

Ответ №1:

Я, наконец, решил поискать в менеджере фрагментов родительского кода в коде ребенка, чтобы задать результат фрагмента, вызвав:

 getParentFragment().getParentFragmentManager().setFragmentResult...
 

и внутри родительского кода получите результат,:

 getChildFragmentManager().setFragmentResultListener...