Android 安卓:切换片段和后退

Android 安卓:切换片段和后退,android,android-fragments,Android,Android Fragments,在努力使我的简单片段程序工作之后,我没有找到任何解决以下问题的方法:我在我的主要活动中管理两个片段:FragmentPine针和FragmentPlot。一次只能出现一个。用户有两个按钮,可以选择要显示的片段。此外,当显示FragmentPlot时,用户应能够通过按back键导航回FragmentPilot。这是我的代码: public void onButtonPlotPressed() { FragmentManager manager = getSupportFragmentMan

在努力使我的简单片段程序工作之后,我没有找到任何解决以下问题的方法:我在我的主要活动中管理两个片段:FragmentPine针和FragmentPlot。一次只能出现一个。用户有两个按钮,可以选择要显示的片段。此外,当显示FragmentPlot时,用户应能够通过按back键导航回FragmentPilot。这是我的代码:

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将删除当前片段并添加旧片段。