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