Más comprensión setRetainInstance (true)
Quéexactamente sucede cuando llamassetRetainInstance(true)
en unFragment
? La documentación es prácticamente inexistente y esto parece ser una función muy importante. Específicamente quiero saber cuánto de esta secuencia (que inventé) es verdadera:
Activity
yFragment.onDetach()
se llama.La actividad se destruye;Activity.onDestroy()
se llama.losActivity
El objeto java se elimina (cuando es posible, por el GC).Un nuevoActivity
Se crea el objeto java; su constructor, yonCreate()
son llamados.EnActivity.onCreate()
o bien tenemossetContentView(...)
que establece un diseño que contiene un fragmento, o usamosFragmentTransaction
para añadir un fragmento.Realmente no estoy seguro de esto, pero asumo que Android es lo suficientemente inteligente como para encontrar el fragmento antiguo, y llamarFragment.onAttach()
para volver a unirlo al nuevoActivity
Siguiente (o antes? Quien sabe?)Activity.onResume()
se llama.Entonces, ¿es correcto? ¿Es Android lo suficientemente inteligente como para encontrar el fragmento antiguo, incluso si lo uso explícitamente?FragmentTransaction.add(new MyFragment(), ...)
¿la primera vez? Y si es así, ¿cómo evito agregar?otro fragmento enonCreate()
? ¿Necesito hacer algo como esto ?:
if (getSupportFragmentManager().findFragmentByTag("foo") == null)
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(new FooFragment(), "foo").commit();
}