2016-05-11 34 views
1

在堆棧中有A-> B-> c,A位於頂部。 當時它希望C在頂部,並保持A,B在堆棧中的順序。在要求中,堆棧中不能有兩個C實例。問題是如果彈出C,那麼所有A,B都被刪除。可以通過編程方式更改堆棧中碎片的順序

現在想要的是C-> A-> B。

是否有可能通過FragmentManager的API實現這一點?

+0

有一種被稱爲堆棧,我不認爲有一個API,但根據你的使用情況的原因,總有辦法得到它的工作! – varunkr

+0

我認爲它已經在這個線程回答https://stackoverflow.com/questions/21665346/android-reorder-fragment-backstack –

+0

也許創建一個新的堆棧與所需的順序,或者可能使用反射來修改實際的? – Nanoc

回答

1

FragmentManager不支持更改後臺堆棧的排序或刪除不在堆棧頂部的項目。

您可能需要考慮管理您自己的Fragment backstack版本。

+0

yeap,希望能夠從Android獲得支持。 – lannyf

0

保持片段隱藏,如果你想顯示它。

0

放下面的代碼你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

pop BackStack將破壞該片段。感謝分享! – lannyf

相關問題