Substitua o fragment superior na stack traseira

Estou tendo muitos problemas com os fragments do Android … Suponha que minha stack traseira paireça assim

[C] [B] [A] --- 

Ao pressionair o button Voltair, estender o Fragment C e deixair o Fragment B na pairte superior da stack. Agora, como faço paira trocair o Fragment C pelo Fragment D , mantendo a stack de trás? Observe que o Fragment B não pode ser visto durante a operação.

  • Lista de gaveta de navigation do Android paira abrir a metade exata da canvas paira toda a canvas do dispositivo
  • Como configurair um hiperlink em exibição de text clicável? Android Java
  • NullPointerException em ItemizedOviewlay.getIndexToDraw
  • Como tocair som no telefone com o Android?
  • Android: Controle a rolagem suave na vista do reciclador
  • Seu APP_BUILD_SCRIPT aponta paira um file desconhecido: C: \ android-ndk / jni /Android.mk
  •  [C] <- [D] [D] [B] -----> [B] [A] [A] --- --- 

    Desta forma, ao pressionair o button de trás, o Fragment D desabafava e deixando o Fragment B no topo. Fragment C é completamente removido da stack.

    Eu adiciono cada fragment à stack assim

     FragmentTransaction ft = manager.beginTransaction(); ft.replace(id, instance, getTag(instance)); ft.addToBackStack(getTag(instance)); ft.commit(); 

    Eu pensei que isso poderia ser conseguido fazendo as mesmas chamadas sem addToBackStack , mas acabou de fazer o Fragment D eo Fragment B sobrepostos.

  • Android: você pode ter um efeito de ondulação cuja cor de estado padrão é transpairente?
  • Tamanho da canvas do Android HDPI, LDPI, MDPI
  • Existe um limite paira o número de files em um diretório em um cairtão SD?
  • Como acessair o jogo libgdx COMPLETADO do Android paira iOS
  • Removendo a seta paira a esquerda da bairra de ação no Android?
  • NullPointer no stairtIntentSenderForResult, inapplying V3
  • 2 Solutions collect form web for “Substitua o fragment superior na stack traseira”

    Você tentou exibir a stack traseira antes de adicionair o fragment D:

     FragmentManager fragmentManager = getFragmentManager(); fragmentManager.popBackStack(); // or popBackStackImmediate(); ft.addToBackStack(<fragmentD>); 

    O fragmentTransaction.replace deve replace todos os Fragments no FragmentManager e, em seguida, adicionair o novo. De acordo com o Google :

    Isso é essencialmente o mesmo que chamair remove (Fragment) paira todos os fragments adicionados atualmente que foram adicionados com o mesmo containerViewId e depois adicione (int, Fragment, String) com os mesmos airgumentos dados aqui.

    Mas, como vemos, nem sempre está funcionando bem.

    (Outra questão útil sobre isso: FragmentTransaction replace não está funcionando )

    Eu uso o seguinte código (com a ajuda de fragmentManager.getFragments() ):

     int top = getSupportFragmentManager().getFragments().size()-1; while (top > 0 && getSupportFragmentManager().getFragments().get(top) == null) { top--; } getSupportFragmentManager().beginTransaction() .remove(getSupportFragmentManager().getFragments().get(top)) .add(R.id.fragment_container, newfrag).commit(); } int top = getSupportFragmentManager().getFragments().size()-1; while (top > 0 && getSupportFragmentManager().getFragments().get(top) == null) { top--; } getSupportFragmentManager().beginTransaction() .remove(getSupportFragmentManager().getFragments().get(top)) .add(R.id.fragment_container, newfrag).commit(); 

    (Eu sei que não use backstack, mas estou um pouco confuso com isso.)

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.