Ich habe eine Aktivität A, die das Fragment Bf aufruft, das das Fragment aufruft. Ich möchte, dass Bf im Backstack platziert wird, wenn Cf aufgerufen wird, damit Benutzer dorthin zurück 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 darüber, wie dies funktionieren würde. Ist es sicher, diese Funktion zu verwenden? Gibt es eine Möglichkeit, dass eine Aktivität aus einer anderen Anwendung nach Bf in den Backstack eingefügt wird?
Gibt es auch eine Möglichkeit, den savedInstanceState des Fragments im Backstack zu ändern?
Ich kann einfach nicht herausfinden, wie ich mit dem Emulator einen robusten Test auf dem Backstack durchführen kann.
quelle
Antworten:
Sie können das Fragment nach Namen einfügen. Geben Sie dem hinteren Stapel beim Hinzufügen von Fragmenten einfach einen Namen.
fragmentTransaction.addToBackStack("fragB"); fragmentTransaction.addToBackStack("fragC");
Popupen Sie dann in Fragment_C den Backstack mit dem Namen ie ..
fragB
und includePOP_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); } });
quelle
addToBackStack
mitreplace
ein Problem verursachen. Wie kann man das machen, ohne anzurufenaddToBackStack
?Drei Möglichkeiten, Fragment von BackStack zu entfernen
Fügen Sie einfach eine dieser Zeilen hinzu:
1)
getActivity().getSupportFragmentManager().popBackStack();
2)
getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
3)
getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
Sie sind alle einfache Möglichkeiten, Fragmente von Backstack zu entfernen
quelle
Wenn wir zuerst das Fragment container_view ersetzen, fügen wir den Namen wie "Spätere Transaktion" hinzu.
getSupportFragmentManager().beginTransaction().replace(R.id.container_view, profileFragment, "Profile").addToBackStack("Later Transaction").commit();
Drücken Sie dann beim Zurück-Drücken der Taste den Back-Stack mit dem Namen Later Transaction
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() { } }); }
quelle
Hier ist ein Beispiel, um das letzte Fragment mit zu platzen
BackStackEntry
val manager = supportFragmentManager try { // get last entry (you can get another if needed) val entry = manager.getBackStackEntryAt(manager.backStackEntryCount - 1) // you can pop it by name manager.popBackStack(entry.name, FragmentManager.POP_BACK_STACK_INCLUSIVE) // or pop by id manager.popBackStack(entry.id, FragmentManager.POP_BACK_STACK_INCLUSIVE) } catch (ex: Exception) { ex.printStackTrace() }
quelle