getParentFragment devolviendo null


Tengo un Fragment que tiene un FrameLayout. Este primer fragmento (A) carga dentro de su marco otro fragmento (B). Cuando llamo getParentFragment desde el fragmento interior (B), obtengo null. ¿Cómo debe utilizarse correctamente este método?

Author: Fllo, 2013-02-11

4 answers

GetParentFragment() se introdujo en el nivel de API 17 (Android 4.2). Android 4.2 introdujo la idea de fragmentos anidados (fragmentos que contienen otros fragmentos). Llamar a esto resulta en null si el fragmento tiene un padre que es una Actividad.

Echa un vistazo a esto.

Si está utilizando la biblioteca de soporte, puede usar getParent (), puede ser que necesite usar getChildFragmentManager() mientras realiza la transacción de fragmentos. Ver esto

 39
Author: Eurig Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-20 09:40:17

En mi caso, aunque mi fragmentA estaba anidado en FragmentB,todavía obtengo null después de llamar a getParentFragment en FragmentA. Finalmente descubrí que debería usar getChildFragmentManager en lugar de getFragmentManager en FragmentB.

Comprueba esto ¿Cuál es la diferencia entre getSupportFragmentManager() y getChildFragmentManager()?

 26
Author: muyiou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:26

Me enfrenté al mismo problema , y solucioné los problemas alojando el segundo fragmento en tu fragmento padre con getChildFragmentManager() entonces no obtendrás el valor nulo ...

Fragmento padre

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

Fragmento hijo: lo que he usado es un diálogo

 HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
    hospitalCardDialog.show(getChildFragmentManager(), "");
 3
Author: Ameen Maheen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-05 09:44:25

La única cosa que ayudó es, al crear el adaptador use getChildFragmentManager().

Si no está utilizando el adaptador, simplemente use getChildFragmentManager() cuando realice transacciones.

setTargetFragment() no se recomienda, ya que da errores en moveState() del fragmento(porque los fragmentos deben estar vinculados a FragmentManager)

 1
Author: Aibol Kussain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-21 04:07:28