2016-04-23 10 views
0

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.

Antwort

2

Das Verhalten, das Sie erleben, sieht für mich OK aus. popBackStack() kehrt die letzte gespeicherte Operation, die in Ihrem Fall ist: replace A with Loading.

So ersetzt es Loading mit A, aber das hat keine Auswirkungen auf B offensichtlich, die Sie ohne Aufnahme der Transaktion hinzugefügt.

Eine Lösung könnte in beiden Fällen addToBackStack() verwenden, so dass beide Transaktionen registriert sind, und rufen Sie dann zweimal popBackStack().

0

Mehrere Fragmente können eine Aktivität/Bildschirm erstellen. Backstack ist wie Zurückpfeil oder zurück zur letzten Aktivität/Bildschirm.

+0

Ich weiß dies ... aber 'addToBackStack()' Methode sollte sich an alle Transaktionen erinnern und ausführen und umgekehrt – Lau

Verwandte Themen