Android 安卓系统中的反压碎片问题

Android 安卓系统中的反压碎片问题,android,android-fragments,fragmentmanager,Android,Android Fragments,Fragmentmanager,我有四个片段:A、B、C、D。现在我从A-->B开始移动,因此我的代码将是 从A到B getActivity().getSupportFragmentManager() .beginTransaction() .replace(R.id.content_frame, new B()) .addToBackStack("A") .commit(); 现在从B到C代码将 getActivity().getSupportFragmentManager() .b

我有四个片段:A、B、C、D。现在我从A-->B开始移动,因此我的代码将是

从A到B

getActivity().getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, new B())
    .addToBackStack("A")
    .commit();
现在从B到C代码将

getActivity().getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, new C())
    .addToBackStack("B")
    .commit();
现在从C到D。但我不想在backbackback中包含C,因为在backpress中我不想显示C片段

 getActivity().getSupportFragmentManager()
     .beginTransaction()
     .replace(R.id.content_frame, new D())
     .commit();

现在,当我按下后退按钮,它将完美地工作到A。现在,如果我再次重复相同的过程。现在再次从D片段返回,我将被直接发送到A片段而不是B片段。您能找出我在上述代码中所犯的错误吗?

您必须为addToBackStack提供相同的字符串值,以用于单个堆栈

.replace(R.id.content_frame, new B())
.addToBackStack("stack") 

.replace(R.id.content_frame, new C())
.addToBackStack("stack") 

这是BackbackChangedListener的代码

public  static void performNoBackStackTransaction( final FragmentManager fragmentManager, String tag, Fragment fragment) {
    final int newBackStackLength = fragmentManager.getBackStackEntryCount() +1;

    fragmentManager.beginTransaction()
            .replace(R.id.content_frame, fragment, tag)
            .addToBackStack(tag)
            .commit();

    fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            int nowCount = fragmentManager.getBackStackEntryCount();
            if (newBackStackLength != nowCount) {
                // we don't really care if going back or forward. we already performed the logic here.
                fragmentManager.removeOnBackStackChangedListener(this);

                if ( newBackStackLength > nowCount ) { // user pressed back
                    fragmentManager.popBackStackImmediate();
                }
            }
        }
    });
}

@hareshchelana这不是问题所在,问题显示没有调用add-to-back堆栈。问题在于片段事务的工作方式。阅读这个答案@Zach。。事实上,我并没有从那个链接中得到答案。是的,它并没有定义一个明确的答案,只是给出了它如何工作的概述。我也遇到过类似的问题,基本上必须定义自己的backbackbackChangeListener来定义在后堆栈调用中发生的事情