2016-12-12 3 views
1

Ich habe 2 Aktivitäten A & B, in Aktivität AI verwaltet Fragment Backstack aber in einem Fall wie unten: Ich habe 4 Fragmente in Aktivität von Fragment 1 zu 2 zu 3 bis 4 gehen dann vom 4. Fragment Ich gehe jetzt zu Aktivität B, was ich will, ist beim Drücken der Zurück-Taste Fragment 4 von Activity zu öffnen und dann auf Back Fragment 3 und so weiter.Pflegen Fragmente-Backstack der vorherigen Aktivität

Ich verwende folgende Funktion das Fragment zu ersetzen und verwalten zurück Stapel

private void changeFragment(Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    fragmentManager.beginTransaction().replace(R.id.act_home_fl_container, fragment).commit(); 
} 

Auf der Rückseite drücken

boolean isPopFragment = getSupportFragmentManager().getBackStackEntryCount() > 0 ? true : false; 
    if (isPopFragment) { 
     getSupportFragmentManager().popBackStack(); 
    } 

ich Erfolg habe bis hierher, aber wenn ich an Aktivität B werde von 4. Fragment und kommt zurück auf Aktivität A, ich bin nicht in der Lage Stapel von Fragmenten Aktivität A.

zu verwalten zurück ich habe nicht, wie sie damit beginnen.

+0

Sie müssen zwei Stapel für zwei Aktivitäten verwalten. Obwohl Sie die Fragmente in derselben Aktivität verwalten können. Ich schlage vor, dass Sie sich dieses Github-Projekt ansehen. [https://github.com/JetradarMobile/multibackstack] .Diese Jungs haben eine sehr gute Implementierung gemacht. – Wizard

Antwort

0

Sie onBackPressed in Ihren Aktivitäten außer Kraft setzen können, prüfen Sie, welches Fragment oben ist und entscheiden, was, wie Sie tun mögen:

@Override 
public void onBackPressed() 
{ 
    // code here 
    super.onBackPressed(); // check if you need this, depends on your needs 
} 
0

Mit diesem Code ändern Fragment

public static void addFragment(final Fragment newFragment, final Fragment hideFragment) { 
    final FragmentManager fragmentManager = getFragmentManager(); 
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.hide(hideFragment); 
    fragmentTransaction.add(R.id.activity_home_container, newFragment, newFragment.getClass().getSimpleName()); 
    fragmentTransaction.addToBackStack(hideFragment.getClass().getSimpleName()); 
    fragmentTransaction.commitAllowingStateLoss(); 
} 

newFragment " Fragment, das Sie hinzufügen möchten "
hideFragment" Fragment, das sich auf dem Container befindet "

Verwandte Themen