1

Ich habe ein Fragment, zum Beispiel A -> B -> C. Wenn ich im Fragment C bin, und drücke die Zurück-Taste, muss ich auf ein Fragment A bekommen Das heißt, Fragment B muss nicht zu backStack hinzugefügt werden. Hier ist der Code, der den Übergang zwischen Fragmenten implementiert.Rückkehr von Fragment C zu Fragment A Zurückdrücken Button

FragmentManager fragmentManager = this.getSupportFragmentManager(); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 

Fragment fragment = fragmentManager.findFragmentByTag(tag); 
fragment.getArguments().putAll(args); 

transaction.replace(idContainer, fragment, tag); 
transaction.addToBackStack(null); 
transaction.commit(); 

An der Öffnung des Fragments C, verwende ich nicht transaction.addToBackStack (null);

Und jetzt habe ich das folgende Problem. Aus dem Fragment C klicke ich auf den Zurück-Knopf und betrete das Fragment A, aber zwei Schichten von Fragmenten überlagern sich.

Like this screenshot

+0

alle Fragmente in Backstack hinzufügen und dann Schleife durchlaufen, bis erste Fragment – Bhavnik

+0

Sie viewpager verwenden? –

+0

Vielleicht möchten Sie [diese Frage] (http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack) überprüfen –

Antwort

-1

Wenn Sie Transaction.addToBackStack(null) rufen, Ihre Fragment hinzugefügt Backstack, so dass Sie nicht nennen sollten, wenn Sie möchten, um Backstack nicht fügen Sie Ihre Fragment.

Was sollten Sie

tun Wenn Sie Ihre Fragment-A mit Fragment-B ersetzen Sie sollten Transaction.addToBackStack(null) nicht nennen, aber wenn man Fragment-B mit Fragment-C ersetzen sollten Sie Transaction.addToBackStack(null) nennen.

tun dies Ihr Fragment-A und Fragment-C wird backstacked werden aber Fragment-B nicht, jetzt, wenn Sie die Zurück-Taste drücken, wird Fragment-A haben.

0

können Sie folgenden Code in Fragment_C verwenden, um zu Fragment_A auf Zurück drücken Sie die Taste zurück von fragment_C

@Override 
public void onResume() { 

    super.onResume(); 

    getView().setFocusableInTouchMode(true); 
    getView().requestFocus(); 
    getView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){ 


       Fragment_A fragment = null; 
       fragment = new Fragment_A(); 

       FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.container_body, fragment); 
       fragmentTransaction.commit(); 


       return true; 

      } 

      return false; 
     } 
    }); 
} 
0

Übergang von A

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new BFragment(), "BFragment").addToBackStack("A_TO_B").commit(); 

Übergang von B nach C

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CFragment(), "CFragment").addToBackStack("B_TO_C").commit(); 
nach B

Überschreiben Sie die onBackPressed() - Methode der Aktivität.

@Override 
public void onBackPressed(); 
if (getSupportFragmentManager().findFragmentByTag("CFragment") != null) { 
    getSupportFragmentManager().popBackStack("A_TO_B", 
    FragmentManager.POP_BACK_STACK_INCLUSIVE); 
} else { 
     super.onBackPressed(); 
     } 
} 
Verwandte Themen