#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...