Android 安卓:切换片段和后退
在努力使我的简单片段程序工作之后,我没有找到任何解决以下问题的方法:我在我的主要活动中管理两个片段:FragmentPine针和FragmentPlot。一次只能出现一个。用户有两个按钮,可以选择要显示的片段。此外,当显示FragmentPlot时,用户应能够通过按back键导航回FragmentPilot。这是我的代码:Android 安卓:切换片段和后退,android,android-fragments,Android,Android Fragments,在努力使我的简单片段程序工作之后,我没有找到任何解决以下问题的方法:我在我的主要活动中管理两个片段:FragmentPine针和FragmentPlot。一次只能出现一个。用户有两个按钮,可以选择要显示的片段。此外,当显示FragmentPlot时,用户应能够通过按back键导航回FragmentPilot。这是我的代码: public void onButtonPlotPressed() { FragmentManager manager = getSupportFragmentMan
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并按back键时,我返回到PlotFragment。但现在,当我试图通过按UI按钮更改为Plot Fragment时,它将继续显示PlotFragment。如果我删除ft.addToBackStack()行,通过按UI上的按钮,片段之间的切换可以正常工作,但是我不能使用back键返回。我做错了什么?你从不把你的
零碎的针头
添加到后台
public void OnButtonNeedlePressed() {
mFragmentNeedle = (FragmentNeedle)manager.findFragmentByTag(FragmentNeedle.class.getSimpleName());
if(mFragmentNeedle == null) {
FragmentManager manager = getSupportFragmentManager();
mFragmentNeedle= new FragmentNeedle();
ft.replace(R.id.main_layout_center, mFragmentNeedle, FragmentNeedle.class.getSimpleName());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
//missing line
ft.addToBackStack(FragmentNeedle.class.getSimpleName());
ft.commit();
manager.executePendingTransactions();
}
}
正如我所理解的,您向后堆栈添加了一个事务,而不是一个片段。我认为这个字符串参数只是事务的可选名称。这没什么区别。因此,我需要将事务从FragmentPinele添加到PlotFragment,如果在提交之前保存事务,当检索Backbackback时,程序将还原保存的事务。是的,名称是可选的。我猜它是用于getSupportFragmentManager().popBackStack(字符串名,int标志);。是的,您添加的是一个事务,而不是一个片段。如果使用add()而不是replace(),FragmentManager将只删除当前片段。在您的情况下,FragmentManager将删除当前片段并添加旧片段。