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 A

em 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.

questionAnswers(1)

yourAnswerToTheQuestion