繁体   English   中英

Android:切换片段和回栈

[英]Android: Switching Fragments and the Backstack

在努力使我的简单片段程序正常工作之后,我没有找到以下解决方案:我在主要活动中管理两个片段:FragmentNeedle和FragmentPlot。 一次只能出现一个。 用户有两个botton,可以在其中选择要显示的片段。 同样,当显示FragmentPlot时,用户应该能够通过按返回键导航回FragmentNeedle。 这是我的代码:

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按钮更改为“绘图片段”时,它将继续显示PlotFragment。 如果我删除ft.addToBackStack()行,则可以通过按UI上的按钮来在片段之间进行切换,但是我无法使用返回键返回。 我做错了什么?

您永远不会将FragmentNeedle添加到后台。

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();   
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM