Я использовал навигацию в своем приложении. Как я могу запустить фрагмент, для которого я получу результат, когда он завершится?

У меня есть два фрагмента Fragment1 и Fragment2, во Fragment1 я использую findNavController().navigate(), запускаю Fragment2, когда Fragment2 закончен, как передать данные во Fragment1? (Перевести Google)

Дубликат: stackoverflow.com/questions/56243119/…

Fintasys 01.07.2019 12:05
0
1
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать getParentFragment() в Fragment2 для передачи данных во Fragment1. Это работает, только если вы создаете Fragment2 через getChildFragmentManager() Fragment1.

Если вы используете getSupportFragmentManager() из Activity, вам нужно создать прослушиватель.

class Fragment2 {
    private UpdateFragment1Listener updateFragment1Listener;

    void sendDataToFragment1() {
        updateFragment1Listener.updateFragment(myData);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof UpdateFragment1Listener ) {
            updateFragment1Listener = (UpdateFragment1Listener ) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement UpdateFragment1Listener ");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        updateFragment1Listener = null;
    }

    interface UpdateFragment1Listener {
        void updateFragment1(MyData myData);
    }
}

class MyActivity implements Fragment2.UpdateFragment1Listener {
    private Fragment1 fragment1;

    @Override
    void updateFragment1(MyData myData) {
        fragment1.update(myData);
    }
}

Я хочу официальное решение, а не интерфейс. Все же разрешите поблагодарить вас. Теперь я использовал EventBus для решения этой проблемы.

Saxxhw 02.07.2019 03:22

Я не знаю, насколько официальным вы хотите, чтобы это было, но решение интерфейса буквально исходит от самой Android Studio. Но да, EventBus должен работать.

Israel dela Cruz 02.07.2019 04:26

Другие вопросы по теме