DrawerLayout项目从backstack单击替换片段是错误的位置

时间:2014-07-03 03:26:19

标签: android android-fragments back-stack

在我的应用程序中有5个片段(FragA,FragB,FragC,FragD,FragE)

步骤1.当应用程序启动FragA打开时

步骤2.我点击drawerlayout项目打开FragB然后FragB打开

步骤3.我点击drawerlayout项目打开FragC然后FragC打开

步骤4.我点击drawerlayout项目打开FragB然后FragB打开

步骤5.我点击后退按钮,它从FragB返回到FragA而不是FragC。为什么呢?

我认为在第4步它会将FragB带到前面并摧毁FragC(而不是重新排序后备箱位置)

我想把选定的片段带到前面并对背斜的位置进行排序(不要破坏)同样的

1.before click drawerlayout item to open FragB again
FragA-->FragB-->FragC
2.after click drawerlayout item to open FragB
FragA-->FragC-->FragB

如何修复它?

这是我用来替换片段

的方法
public void replaceFragment (Fragment fragment){
    String backStateName =  fragment.getClass().getName();
    String fragmentTag = backStateName;

    FragmentManager manager = getFragmentManager();

    boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);

    if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null){ //fragment not in back stack, create it.
        FragmentTransaction ft = manager.beginTransaction();
        ft.replace(R.id.frame_container, fragment, fragmentTag);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(backStateName);
        ft.commit();
    }
}

1 个答案:

答案 0 :(得分:0)

这可能是因为您的第一个片段包含在默认活动中,但您可以尝试其中一个:

public abstract boolean popBackStackImmediate(int id,int flags)或

public abstract boolean popBackStackImmediate(String name,int flags)或

public abstract void putFragment(Bundle bundle,String key,Fragment fragment)

来源:片段管理器文档http://developer.android.com/reference/android/app/FragmentManager.html