2016-05-13 14 views
2

Ich versuche, einen Backstack zu implementieren, während Fragmente verwendet werden, aber wenn ich die Zurück-Schaltfläche verwende, werde ich immer wieder aus der App auf den Startbildschirm gebracht.Implementieren von Backstacks mit Fragmenten

Aktivität öffnet Fragment A; Fragment A hat eine anklickbare TextView, die Fragment B öffnet (das funktioniert). BACK sollte mich zu Fragment A zurückbringen, aber es bringt mich stattdessen zum Home-Bildschirm.

Hier ist die Forderung der Aktivität zur Öffnung des Fragments A in onCreate:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.fragment_layout_container, new FragmentLogin(), "fragment_login") 
      .addToBackStack("login_screen") 
      .commit(); 

    Log.d("Back", getFragmentManager().getBackStackEntryCount() +" <- Entry Count at LoginActivity.onCreate"); 

An diesem Punkt der Log druckt 0 <- Entry Count at LoginActivity.onCreate. Etwas, das ich dies getan haben von Druck 1.

falsch hält Dann hat das Fragment A dieses Zuhörer:

forgottenPassword.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_layout_container, new FragmentForgottenPassword(), "fragment_password") 
        .addToBackStack("forgotten_password") 
        .commit(); 

      Log.d("Back", getFragmentManager().getBackStackEntryCount() + " <- Entry Count at FragmentLogin.onCreateView.Listener"); 
     } 
    }); 

Die Log hier druckt 1 <- Entry Count at FragmentLogin.onCreateView.Listener. Hier arbeitet der Hörer und öffnet Fragment B - aber die Zurück-Taste bringt mich zurück zum Home-Bildschirm.

Antwort

2

verwenden in Ihrer Aktivität es die Fragmente herausspringen sollte bereits hinzugefügt

@Override 
public void onBackPressed() 
{ 
    if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
zu Backstack
0

Try Like This,

public void replaceFragment(Fragment fragment, boolean addToBackStack) { 

    FragmentTransaction transaction = getFragmentManager() 
      .beginTransaction(); 

    if (addToBackStack) { 
     transaction.addToBackStack(null); 

    } else { 
     getFragmentManager().popBackStack(null, 
       FragmentManager.POP_BACK_STACK_INCLUSIVE); 

    } 
    transaction.replace(R.id.fragment_layout_container, fragment); 
    transaction.commitAllowingStateLoss(); 
    getFragmentManager().executePendingTransactions(); 

} 

und es so gebraucht,

replaceFragment(new FragmentForgottenPassword(), true); 
0

Es gibt eine GitHub Bibliothek, die diese Arbeit für Sie tun!
https://github.com/rathodchintan/Fragment-Back-Stack
Immer wenn Sie ein neues Fragment anzeigen, drücken Sie einfach das Fragment mit dem folgenden Code in den Stapel. // hier ist dieses Fragment unser erstes Fragment
homeListFragment = new HomeListFragment(); fragmentStack.push (homeListFragment);
Es hat auch viele andere Stapeloptionen.

Verwandte Themen