web-dev-qa-db-fra.com

getParentFragment retournant null

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?

29
Gonzalo

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

47
Eurig Jones

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 ()?

30
muyiou

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(), "");
3
Ameen Maheen

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)

2
Aibol Kussain