Compreensão adicional setRetainInstance (true)
o queexatamente acontece quando você ligasetRetainInstance(true)
com umFragment
? A documentação é praticamente inexistente e esta parece ser uma função muito importante. Especificamente, quero saber quanto dessa sequência (que inventei) é verdadeira:
Activity
eFragment.onDetach()
é chamado.A atividade é destruída;Activity.onDestroy()
é chamado.oActivity
O objeto java é excluído (quando possível, pelo GC).Um novoActivity
Objeto java é criado; seu construtor eonCreate()
são chamados.EmActivity.onCreate()
nós também temossetContentView(...)
que define um layout contendo um fragmento, ou usamosFragmentTransaction
para adicionar um fragmento.Eu realmente não tenho certeza sobre isso, mas eu suponho que o Android é inteligente o suficiente para encontrar o fragmento antigo, e chamarFragment.onAttach()
para recolocá-lo no novoActivity
Próximo (ou antes? Quem sabe?)Activity.onResume()
é chamado.Então está correto? O Android é inteligente o suficiente para encontrar o fragmento antigo, mesmo se eu usar explicitamenteFragmentTransaction.add(new MyFragment(), ...)
a primeira vez? E se sim, como evito adicionaroutro fragmento emonCreate()
? Eu preciso fazer algo assim ?:
if (getSupportFragmentManager().findFragmentByTag("foo") == null)
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(new FooFragment(), "foo").commit();
}