J'ai un Fragment
qui a un FrameLayout
. Ce premier fragment (A) charge à l'intérieur de son Framelayout un autre fragment (B). Lorsque j'appelle getParentFragment
à partir du fragment interne (B), j'obtiens null
. Comment utiliser correctement cette méthode?
getParentFragment () a été introduit dans l'API niveau 17 (Android 4.2). Android 4.2 a introduit l'idée de fragments imbriqués (fragments contenant d'autres fragments). L'appel à ceci a pour résultat null si le fragment a un parent qui est une activité.
Jetez un œil à this .
Si vous utilisez la bibliothèque de support, vous pouvez utiliser getParent (), peut-être devrez-vous utiliser getChildFragmentManager () lors de la transaction de fragment. Voir ceci
Dans mon cas, même si mon fragmentA était imbriqué dans fragmentB, mais j'obtiens toujours null après l'appel à getParentFragment dans FragmentA. Enfin, j'ai trouvé que je devrais utiliser getChildFragmentManager plutôt que getFragmentManager dans FragmentB.
vérifier cela Quelle est la différence entre getSupportFragmentManager () et getChildFragmentManager ()?
J'ai rencontré le même problème et j'ai résolu les problèmes en hébergeant le deuxième fragment dans votre fragment parent avec getChildFragmentManager()
, puis vous n'obtiendrez pas la valeur nulle ...
Fragment parent
SignUpFragment signUpFragment = new SignUpFragment();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment)
.addToBackStack(null).commit();
Fragment enfant: ce que j'ai utilisé est une boîte de dialogue
HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
hospitalCardDialog.show(getChildFragmentManager(), "");
La seule chose qui a aidé est, lors de la création de l'adaptateur, utilisez getChildFragmentManager()
.
Si vous n'utilisez pas l'adaptateur, utilisez simplement getChildFragmentManager()
lorsque vous effectuez des transactions.
setTargetFragment()
n'est pas recommandé, car il donne des erreurs sur moveState()
du fragment (car les fragments doivent être liés à FragmentManager)