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:
Essa verificação
-- 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.
0 comentários:
Postar um comentário