Une getParentFragment()
de mon fragment imbriqué renvoie un null
. Je me rends compte que l'obtention d'un null
signifie que le fragment est attaché à l'activité et non au fragment de conteneur imbriqué. Mais j'imbrique explicitement le fragment enfant à l'intérieur du fragment parent en utilisant l'enfant FragmentManager
et pense donc que je ne devrais pas obtenir un null
. Pourriez-vous me dire ce qui me manque?
Fragment parent
public class UsageBreakUp extends Fragment implements Filter.OnFragmentInteractionListener {
....
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getChildFragmentManager().beginTransaction().add(R.id.filter, new Filter()).commit();
}
...
}
Fragment enfant
public class Filter extends Fragment {
...
public Filter() {
if (getParentFragment() == null)
Log.d(LOG_TAG, "parent fragment is null");
}
...
}
J'appelais getParentFragment()
dans le constructeur du fragment enfant et donc avant que le fragment enfant ne soit entièrement créé. Le déplacement de getParentFragment()
vers onCreateView()
a résolu le problème. Le décalage n'était pas un problème car j'appelais getParentFragment()
pour vérifier si le fragment parent avait implémenté un écouteur d'interaction de fragment enfant.