Ich lerne, wie man Fragmente richtig verwendet. Ich habe 4 Fragmente:FragmentManager.popBackStack() fügt Fragment unterhalb der aktuellen
- A
- B
- Laden
- komplette
Es einander in dieser Reihenfolge ersetzen sollte:
A ==>Loading ==>B ==>Laden ==>komplette
Methode, die mein Fragment A in Loading ändern:
LoadingFragment loadingFragment = new LoadingFragment();
Bundle bundle = new Bundle();
bundle.putBoolean("fragmentA", true);
loadingFragment.setArguments(bundle);
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, loadingFragment)
.addToBackStack(null)
.commit();
Ändern Fragment B in Laden sieht ähnlich (nur Argumente sind offensichtlich geändert)
Verfahren, das Fragment in Fragment B Laden ändern:
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new FragmentB())
.commit();
}
}).start();
Thread.sleep (...) ist nur eine lange Operation ... Offensichtlich füge ich diesmal .addToBackStack(null)
nicht hinzu.
Ok. Nun das Problem:
Wenn ich getFragmentManager().popBackStack()
Methode verwenden, das vorherige Fragment (A) unter hinzugefügt wird (mein Fragment Container ist Linearlayout) mein tatsächliches Fragment, anstatt es zu replaceing. Demnach: https://stackoverflow.com/a/17793959/3279023 sollte es funktionieren, aber es ist nicht.
Ich weiß dies ... aber 'addToBackStack()' Methode sollte sich an alle Transaktionen erinnern und ausführen und umgekehrt – Lau