2016-05-11 8 views
1

Mit A-> B-> c im Backstack ist A oben. Zu der Zeit möchte es C oben haben, und behalten A, B in der Reihenfolge im Stapel. In der Anforderung kann es nicht zwei C-Instanzen im Stapel haben. Das Problem ist, wenn das C dann alle A, B entfernt wird.kann die Reihenfolge der Fragmente im Backstack programmgesteuert geändert werden

Was es will, ist C-> A-> B jetzt zu haben.

Ist es möglich, dies mit FragmentManager's API zu erreichen?

+0

Es gibt einen Grund, warum es einen Stapel genannt wird, ich glaube nicht, dass es eine API ist, sondern je nach Anwendungsfall, gibt es immer einen Ansatz um es zur Arbeit zu bringen !! – varunkr

+0

Ich denke, es ist bereits in diesem Thread beantwortet https://StackOverflow.com/Questions/21665346/android-reorder-fragment-backstack –

+0

Vielleicht erstellen einen neuen Stapel mit der gewünschten Reihenfolge, oder vielleicht mit Reflexion, um die tatsächliche zu ändern? – Nanoc

Antwort

1

FragmentManager unterstützt nicht leicht die Reihenfolge des Backstacks ändern oder Elemente entfernen, die nicht an der Spitze des Stapels sind.

Vielleicht möchten Sie Ihre eigene Version eines Fragment Backstacks verwalten.

+0

yeap, möchte Unterstützung von Android eingebaut haben. – lannyf

0

halten Fragment verstecken und wenn Sie es zeigen wollen.

0

put Code unten in Ihrem activiy

FragmentManager fragmentManager 


//add fragment A 
fragmentManager = getFragmentManager(); 
FragmentTransaction ft = fragmentManager .beginTransaction(); 
ft.add(resId, fragmentA); 
ft.addToBackstack("tag"); 
ft.commit(); 

//add fragmentB 
fragmentManager = getFragmentManager(); 
FragmentTransaction ft = fragmentManager .beginTransaction(); 
ft.replace(resId, fragmentB); 
ft.addToBackstack("tag1"); 
ft.commit(); 

//add fragmentC 
fragmentManager = getFragmentManager(); 
FragmentTransaction ft = fragmentManager .beginTransaction(); 
ft.replace(resId, fragmentC); 
ft.addToBackstack("tag2"); 
ft.commit(); 

//then try to take back click of B and C fragment here through interface 

//backclick of C 
public void backClick() 
{ 
fragmentManager.popBackStack("tag1",0); 
} 

//back click of B 
public void backClick1() 
{ 
fragmentManager.popBackStack("tag",0); 
} 
+0

der Pop BackStackwird das Fragment zerstören. Danke fürs teilen! – lannyf