Tecnologia do Blogger.
RSS

[androidbrasil-dev] [Solução] Actionbar + Tabs + Fragment + Rotação

Eu já enchi bastante o saco por causa dessa dúvida mas só depois de um debug bem minucioso eu consegui entender o que estava acontecendo, então resolvi postar a resposta que eu encontrei para que outros não precisem passar por tudo isso.
Ao rotacionar, independente de qualquer lifecycle, tablistener ou ordem de decisão que tenhamos programado, o sistema vai colocar novamente o fragment onde estava, e isso se eu não me engano é simultaneo com o onCreate() da activity.
Ou seja, no meu caso, após rotacionar, a activity fazia toda a verificação do estado do service (como se estivesse iniciando do zero) para decidir quais tabs e fragments carregar, e ele até selecionava a aba correta e o fragment correto para adicionar, mas o fragment já estava lá, e era isso que eu não entendia.
Após pensar um tempo, eu adicionei esse trecho de codigo no tablistener que faz a verificação se o fragment não esta lá, e só então adiciona.
Creio que isso seja de serventia:
public void onTabSelected(Tab tab, FragmentTransaction ft) {

           
// Check if the fragment is already initialized
           
if (mFragment == null) {
               
               
// If not, instantiate and add it to the activity
                mFragment
= Fragment.instantiate(mActivity, mClass.getName(),
                        args
);
                ft
.add(R.id.main_fragment_layout, mFragment, mTag);
           
} else {
               
// Se estamos voltando de uma rotação, o sistema já se
               
// encarregou de colocar o fragment onde estava, e ele ja esta visivel
               
if (!mFragment.isVisible()) {
                    ft
.attach(mFragment);
               
}
           
}

Essa verificação if (!mFragment.isVisible()) me salva de correr o risco de adicionar o fragment num container se ele ja esta la.
Espero que seja de ajuda pra alguém.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário