Подтвердить что ты не робот

GetParentFragment возвращает null

У меня есть Fragment, у которого есть FrameLayout. Этот первый фрагмент (A) загружает внутри своего Framelayout другой фрагмент (B). Когда я вызываю getParentFragment из внутреннего фрагмента (B), я получаю null. Как этот метод следует использовать должным образом?

4b9b3361

Ответ 1

getParentFragment() был представлен на уровне API 17 (Android 4.2). Android 4.2 представила идею вложенных фрагментов (фрагменты, содержащие другие фрагменты). Вызов этого результата имеет значение null, если фрагмент имеет родительский объект, который является активностью.

Посмотрите этот.

Если вы используете библиотеку поддержки, вы можете использовать getParent(), возможно, вам нужно использовать getChildFragmentManager() при выполнении транзакции фрагмента. См. this

Ответ 2

В моем случае, хотя мой фрагмент А был вложен в фрагмент B, но я все равно получаю null после вызова getParentFragment в FragmentA. Наконец, я обнаружил, что я должен использовать getChildFragmentManager, а не getFragmentManager в FragmentB.

проверьте это В чем разница между getSupportFragmentManager() и getChildFragmentManager()?

Ответ 3

Я столкнулся с той же проблемой и исправил проблемы, разместив второй фрагмент в родительском фрагменте с помощью getChildFragmentManager(), тогда вы не получите нулевое значение...

Родительский фрагмент

  SignUpFragment signUpFragment = new SignUpFragment();
    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment)
            .addToBackStack(null).commit();

Детский фрагмент: то, что я использовал, - это диалог

 HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
    hospitalCardDialog.show(getChildFragmentManager(), "");

Ответ 4

Единственное, что помогло, - при создании адаптера использовать getChildFragmentManager().

Если вы не используете адаптер, просто используйте getChildFragmentManager() при совершении транзакций.

setTargetFragment() не рекомендуется, так как он дает ошибки в moveState() фрагмента (поскольку фрагменты должны быть привязаны к FragmentManager)