web-dev-qa-db-de.com

Wie kann ich ein Fragment vom Backstack entfernen?

Ich habe eine Aktivität A, die das Fragment Bf aufruft, und das Fragment Cf. Ich möchte, dass Bf beim Aufruf von Cf in den Backstack eingefügt wird, sodass Benutzer zurück zu diesem navigieren können. Wenn jedoch eine bestimmte Taste in Cf gedrückt wird, möchte ich, dass Bf aus dem Backstack entfernt wird. Ist das möglich?

Ich sehe, dass es eine popBackStack () - Funktion gibt. Ich bin jedoch etwas verwirrt, wie das funktionieren würde. Ist die Verwendung dieser Funktion sicher? Besteht die Möglichkeit, dass eine Aktivität aus einer anderen Anwendung nach Bf auf dem Backstack eingefügt wird? 

Gibt es auch eine Möglichkeit, den saveInstanceState des Fragments auf dem Backstack zu ändern? 

Ich kann einfach nicht herausfinden, wie man mit dem Emulator einen robusten Test des Backstacks durchführt.

54
user2085335

Sie können das Fragment nach Namen platzieren. Beim Hinzufügen von Fragmenten zum hinteren Stapel geben Sie ihnen einfach einen Namen.

fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");

Legen Sie dann in Fragment_C den hinteren Stapel mit dem Namen dh fragB auf und fügen Sie POP_BACK_STACK_INCLUSIVE

someButtonInC.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        FragmentManager fm = getActivity()
                .getSupportFragmentManager();
        fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
});
105
Archie.bpgc

Drei Möglichkeiten, Fragment von BackStack zu entfernen

  1. Fügen Sie einfach diese Zeile hinzu

        getActivity().getSupportFragmentManager().popBackStack();
    

2. #

        getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

3.#

    getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

es ist die einfachste Möglichkeit, Fragment von Backdtack zu entfernen

1
MD Khali

erstes Ersetzen des Fragments container_view zu diesem Zeitpunkt fügen wir den Namen wie "Later Transaction" hinzu.

   getSupportFragmentManager().beginTransaction().replace(R.id.container_view, 
    profileFragment, "Profile").addToBackStack("Later Transaction").commit();

drücken Sie dann auf die Schaltfläche "Zurück", um den hinteren Stapel mit dem Namen der späteren Transaktion zu öffnen

     int count = getSupportFragmentManager().getBackStackEntryCount();
    if(count > 1) {
     getSupportFragmentManager().popBackStack("Later Transaction", 
     FragmentManager.POP_BACK_STACK_INCLUSIVE);
    } else {
        DialogUtils.show(HomeActivity.this, 
        getString(R.string.exit_app_message), getString(R.string.alert), 
       "Yes","No", new DialogUtils.ActionListner() {
            @Override
            public void onPositiveAction() {
                finish();
            }
            @Override
            public void onNegativeAction() {
            }
        });
    }
0
abhijit rajmane