Фрагмент Android реализует слушатель фрагмента диалога «исключение нулевого указателя» - PullRequest
0 голосов
/ 12 января 2019

У меня есть Activity A. И в stepperLayout этой активности я использую Fragment B. Я вызываю dialogFragment C из Fragment B. Чем для DialogFragment C, я вызываю метод listenerInterface, но интерфейс listener равен null. Так что было исключение нулевого указателя. Деятельность A не реализует интерфейс. Только фрагмент B реализует это.

 My Fragment B

 dialogFragmentC = DialogFragmentC .newInstance();
 dialogFragmentC .show(getFragmentManager(), "");

My DialogFragment C

 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            this.listener = (DialogFragmentListener) context;
        } catch (Exception e) {
            Timber.i(e);
        }
    }

1 Ответ

0 голосов
/ 12 января 2019

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

Решение 1:

Используйте дочерний менеджер фрагментов для запуска: dialogFragmentC.show(getChildFragmentManager(), ""); и затем проверьте родительский фрагмент: this.listener = (DialogFragmentListener) getParentFragment();

Решение 2:

Использовать целевой фрагмент: Android - getTargetFragment и setTargetFragment - Для чего они используются . Установите целевой фрагмент вашего dialogFragmentC равным FragmentB при создании dialogFragmentC и используйте getTargetFragment в dialogFragmentC для получения прослушивателя.

...