0
在努力使我的簡單片段程序工作後,我還沒有找到任何解決方案:我在我的主要活動中管理兩個片段:FragmentNeedle和FragmentPlot。一次只能出現一個。用戶有兩個bottons可以選擇他想要顯示的片段。此外,當FragmentPlot顯示時,用戶應該能夠通過按回退鍵導航回FragmentNeedle。這是我的代碼:Android:切換片段和Backstack
public void onButtonPlotPressed()
{
FragmentManager manager = getSupportFragmentManager();
mPlotFragment = (PlotFragment) manager.findFragmentByTag(PlotFragment.class.getSimpleName());
if(mPlotFragment == null)
{
mPlotFragment = new PlotFragment();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.main_layout_center, mPlotFragment, PlotFragment.class.getSimpleName());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
manager.executePendingTransactions();
}
public void OnButtonNeedlePressed()
{
FragmentManager manager = getSupportFragmentManager();
mFragmentNeedle = (FragmentNeedle) manager.findFragmentByTag(FragmentNeedle.class.getSimpleName());
FragmentTransaction ft = manager.beginTransaction();
if(mFragmentNeedle == null)
{
mFragmentNeedle= new FragmentNeedle();
ft.replace(R.id.main_layout_center, mFragmentNeedle, FragmentNeedle.class.getSimpleName());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
manager.executePendingTransactions();
}
}
當顯示PlotFragment,我按背,我回到NeedleFragment。但現在,當我嘗試通過按UI按鈕切換到Plot Fragment時,它將繼續顯示PlotFragment。如果我刪除了ft.addToBackStack()這一行,通過按UI上的按鈕,片段之間的切換就可以正常工作,但是我不能用後退鍵返回。我在做什麼錯了?
正如我所理解的,您添加回棧堆棧事務而不是片段。我認爲這個字符串參數只是該事務的可選名稱。沒什麼區別。所以我需要的是將事務從FragmentNeedle添加到PlotFragment,如果您在提交事務之前保存事務,當您檢索backstack時,程序將恢復已保存的事務。 – Cocomico
是的,名稱是可選的。我想它是用於getSupportFragmentManager()。popBackStack(String name,int flags);.是的,你添加一個交易不是一個片段。如果你使用add()而不是replace(),FragmentManager將只移除你當前的片段。在你的情況下,FragmentManager將刪除你的當前並添加舊的片段。 – Neige