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.
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);
}
});
Drei Möglichkeiten, Fragment von BackStack zu entfernen
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
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() {
}
});
}