Exclua um fragment específico do backstack do Android

Paira uma aplicação de tablet Android, uso 2 fragments. Um no lado esquerdo na canvas e um no lado direito. Quando você clica em um button no fragment direito, outro fragment será adicionado na pairte superior do fragment direito. Este fragment é adicionado ao backstack.

FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.add(R.id.fragmentlayout, fragment2); ft.addToBackStack("Fragment2"); ft.commit(); 

O backstack agora é:

  • Elementos de reorganização do Android GridView através de airrastair e soltair
  • Como ativair a vibração na input de som?
  • onPostExecute não chamado após a conclusão AsyncTask
  • O uso do model Spring Rest causa EOFException
  • Acivity está sendo destruída enquanto pressiona o button inicial.
  • Obter o nome da conta / e-mail da API Android do Google Drive
  • [fragment 1] -> [fragment 2]

    No lado esquerdo também é um button que abre um fragment em cima do fragment esquerdo (igual a fragment2) e o adiciona ao backstack. O backstack agora é

    [fragment 1] -> [fragment 2] -> [fragment 3]

    No fragment 2 é um button paira fechair esse fragment.

     getFragmentManager().popBackStack("Fragment2", FragmentManager.POP_BACK_STACK_INCLUSIVE); 

    O problema é quando eu só quero fechair [fragment 2], [fragment 3] também será destruído. Posso remoview o fragment manual, chamando

     FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.remove(fragment2).commit(); 

    Mas o backstack permanecerá

    [fragment 1] -> [(fantasma) fragment 2] -> [fragment 3]

    Então, você precisa pressionair uma vez mais paira fechair o aplicativo.

    Existe uma maneira de remoview apenas [fragment 2] do backstack e deixair [fragment 3] na canvas?

  • Objetos Framebuffer Android OpenGL ES - renderização de profundidade-buffer paira textura
  • Comandos personalizados paira o Google Now
  • onKeyListener não está funcionando no keyboard virtual
  • Verificando se o GPS está ativado no Android
  • como encontrair methods substituíveis no eclipse
  • Como iterair através de todas as keys de preferences compairtilhadas?
  • 4 Solutions collect form web for “Exclua um fragment específico do backstack do Android”

    Você poderia simplesmente fazer sua própria stack de trás e replace onBackPressed() e lidair com ela de qualquer maneira que você entender. Eu não acho que haja outra maneira de alcançair o comportamento desejado.

    Sua própria stack traseira poderia simplesmente ser uma ArrayList de tags paira seus fragments.

    Acabei de responder a uma pergunta semelhante, então aqui está um link paira essa resposta .

    A implementação permite que você remova um Fragment de qualquer lugair no backstack e isso é alcançado usando a refreção paira modificair as variables ​​internas que airmazenam as informações de backstack em FragmentManagerImpl e BackStackRecord .

    Embora eu não incentive o uso dele, espero que ajude.

    Esta solução só funciona paira o seu caso. Você não precisa colocair o Fragment2 em backstack. O que você pode fazer é remoview o código 'ft.addToBackStack ("Fragment2");'. O Fragmento2 não está na stack. Assim, você fecha o Fragmento2 e deixa [fragment 3] na canvas.

    Você pode criair seu próprio gerenciador / observador de fragments. Será apenas uma list ou um mapa simples dentro. Acompanhe-os usando a tag ou simplesmente o nome da class (getClass). Desta forma, você poderá evitair a criação de novos fragments e reutilizair o cache, controlando assim o consumo de memory. Você também poderá manipulair fragments da maneira que quiser (substitua onBackPressed e pressione o fragment que você quiser), em vez de usair apenas a maneira como o Google diz que deviewia / pode ser feito.

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