У меня есть Fragment
, у которого есть FrameLayout
. Этот первый фрагмент (A) загружает внутри своего Framelayout другой фрагмент (B). Когда я вызываю getParentFragment
из внутреннего фрагмента (B), я получаю null
. Как этот метод следует использовать должным образом?
GetParentFragment возвращает null
Ответ 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)