2017-09-06 2 views
-1

I‘finden kann nicht, wo es in Fragmente A kehrt nach einem Aufruf Fragmente B.Fragment A nennt Fragment B - B eine popbackstack tut - wo nicht zurückgibt es in A

Fragment A ruft Test-Fragment wie folgt:

btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
Test test = new Test(); 
       ft.replace(R.id.container, test); 
       ft.addToBackStack("test"); 
       ft.commit(); 
      } 
     }); 

in Test I auf einer Schaltfläche klicken, um zurückzukehren:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    Button btn = (Button) getActivity().findViewById(R.id.back); 
    btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      getActivity().getFragmentManager().popBackStackImmediate(); 
     } 
    }); 
} 

Von dort dachte ich, dass es in onAttach, onResume zu Fragmente A zurückkehrt, aber ich sehe nicht, wo es in Fragmente zurückkehrt EIN?

@Override 
    public void onResume() { 
     super.onResume(); 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
    } 

Antwort

-1

Verwenden

Log.d("Fragment", "Fragment A") 

in onResume() Methode von Fragment A-Klasse. Wenn die Steuerung zu Fragment A zurückkehrt, wird diese Zeile in logcat angezeigt.

+0

Ich bin im Debugger-Modus mit einem Breakpoint in onResume. es kommt nicht auf onResume zurück. – narb

+0

Verwenden Sie PopBackStack ("Test") anstelle von PopBackStackImmediate() –

+0

Popbackstack ("Test", 0) funktioniert nicht besser. Ich änderte zu addToBackStack (Null) und ein popbackstack ohne Umbau. Ich habe eine Trennung und eine Pause hinzugefügt. Ich sehe Frag-Test durch beide, aber kein Zeichen der Re-Aktivierung in Frag A. – narb

0

PopBackStack() ruft kein Fragment auf, es öffnet eine Fragmenttransaktion.

So wird die letzte Fragmenttransaktion beim Aufruf umgekehrt. Wenn Sie von FragmentA nach FragmentTest wechseln, wird FragmentA durch FragmentTest ersetzt und diese Transaktion dem Backstack (nicht dem Fragment) hinzugefügt. Wenn Sie dann auf die Zurück-Schaltfläche klicken, wird die Transaktion vom Back-Stack entfernt, bei dem "dieses FragmentA durch einen FragmentTest ersetzt" wird.

Diese Anweisung kehrt die letzte Transaktion um und entfernt sie aus dem Stapel der ausgeführten Transaktionen. Also onAttach wird nicht aufgerufen und da Sie das Fragment ersetzen, wird oncreateView aufgerufen.

Bearbeiten: Verwenden Sie diese Funktion, um zu überprüfen Backstack vorhanden ist und Ihr Testfragment hat.

if (getSupportFragmentManager().getBackStackEntryCount() > 0 && getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) { 
    Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container); 
     if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){ 
      getSupportFragmentManager().popBackStackImmediate(); 
     } 
    } 
+0

Ich dachte, es wurde verwendet, um einen aktiven Fragmente-Stack zu erhalten! Also, wie kann ich Fragment-Test beenden und A fortsetzen. Ich würde lieber eine UI-Schaltfläche zurück verwenden. – narb

+0

Ich verstehe das Problem nicht. Wenn Sie popbackstack() aufrufen, wird der Fragmenttest beendet und Fragment A in create view wird nach anderen Lebenszyklen aufgerufen. So wird natürlich Fragment A im Lebenslauf aufgerufen. Wenn Sie meine Erklärung hilfreich finden bitte Stimme ab und akzeptiere die Antwort. – Anonymous

+0

Wenn Sie sagen: "Es springt die Transaktion aus dem Backstack, die war" ersetzen dieses FragmentA mit einem FragmentTest ", widerspreche ich eigentlich. – narb

Verwandte Themen