comportamento do popbackstack de fragmento quebrado em 25.1.0 e 25.1.1
Desde a versão de suporte 25.1.0 e a mais recente 25.1.1, tive um comportamento estranho ao substituir / adicionar fragmentos. Houve problemas relatados para 25.1.0Android - fragmentTransaction.replace () não funciona na biblioteca de suporte 25.1.0
Mas agora em 25.1.1 eu tenho problemas semelhantes. Para reproduzir o comportamento, criei um aplicativo de exemplo que você pode encontrar emhttps://github.com/holoduke/fragmenttest
É basicamente uma atividade com um contêiner de fragmento. Estão disponíveis alguns fragmentos que serão substituídos dinamicamente pressionando um botão. Começamos adicionando FragmentA a partir da própria mainActivity.
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment f = new FragmentA();
fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
f.setRetainInstance(false);
ft.replace(R.id.fragmenttarget, f);
ft.addToBackStack(null);
ft.commit();
Tudo de bom Funciona bem. em 25.0.1, 25.1.0 e 25.1.1
Agora, no fragmento A, existem 3 botões que substituirão o fragmento atual por fragmentoA, fragmentoB ou fragmentoC
o código para adicionar o fragmento B e C é quase o mesmo que o fragmento A, exceto que não definimos:
fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
quando o fragmento B ou C é adicionado, o seguinte código é executado:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment f = new FragmentB();
f.setRetainInstance(false);
ft.replace(R.id.fragmenttarget, f);
ft.addToBackStack(null);
ft.commit();
Ainda tudo de bom em 25.0.1, 25.1.0 e 25.1.1. Se você adicionar fragmentB e C algumas vezes, o fm.getBackStackEntryCount () estará aumentando. Isso é bom.
Agora a parte estranha. Queremos adicionar FragmentA com popStackImmediate (para limpar o histórico) Aqui o comportamento das duas versões de suporte está ficando louco.
Digamos que você execute o seguinte bavhiour nas 3 versões:
iniciar aplicaçãosubstituir pelo fragmento Bsubstituir pelo fragmento Csubstituir pelo fragmento Bsubstituir pelo fragmento Csubstituir pelo fragmento Aem 25.0.1 tudo funciona bem. o backstack é limpo e onCreateView e ActivityCreated são chamados no FragmentA.
na 25.1.0, de alguma forma, após a substituição por FragmentA, o onCreateView e ActivityCreated são chamados 2 vezes. Não é bom.
em 25.1.1 é ainda pior. depois de substituir por fragmentA, para todas as visualizações no backstack, onCreateView e ActivityCreated são chamados. Agora isso é engraçado né :)
Basta experimentar meu aplicativo de amostra e procurar no logcat. altere a versão de suporte no arquivo app.gradle para ver as diferenças.
Eu ficaria feliz se alguém é capaz de reconhecer esse problema também, para que possamos encontrar uma maneira de superar ou até mesmo resolver esse problema.