当前位置: 首页 > 知识库问答 >
问题:

Android系统中的背按碎片问题

呼延渝
2023-03-14

我有四个片段:甲、乙、丙、丁。现在我从甲-

从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。但我不想在Backback中包括C,因为在back press中,我不想显示C片段。

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

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

共有2个答案

葛海阳
2023-03-14

这是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();
                }
            }
        }
    });
}
海新霁
2023-03-14

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

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

.replace(R.id.content_frame, new C())
.addToBackStack("stack") 
 类似资料:
  • 当我在选项卡之间切换并将片段附加到选项卡视图时,我面临着重叠片段的问题,下面是我的代码,请帮助

  • 在我的片段中,我想在加载一些数据后干杯,如下所示: 这只有在片段仍然附加到活动的情况下才有意义,即片段是可见的,而getActive()不会返回null。 我可以用或使用isAdded(),对吗?在这里,我想知道这两种方法之间的区别是什么,我最好使用哪一种?

  • 我可以使用一个片段作为一个活动吗?我已经创建了一个片段,但我希望它有像活动一样的功能,所以我使用片段扩展碎片活动。然而,我有一个带有碎片的导航抽屉。当我更改为“扩展碎片活动”时,我的代码有问题?请给我指路。

  • 当我将一个片段(它是带有背景的全屏)显示在另一个片段(我们称之为main)上时,我的main片段仍然会对单击做出反应(即使我们没有看到按钮,我们也可以单击它)。 问题:如何防止点击第一(主)片段?

  • 我正在尝试创建一个可绘制的自定义阴影,如下图所示 这不是一个普通的物质阴影,首先它有一个更大的半径,并且在所有方面(顶部,底部,右侧,左侧)都有光环效果。 我试过梯度,但它只有一个圆形半径,在这里不起作用,因为它是矩形的。 我甚至试着把CardView提升到100 DP,但是显然提升是有限制的。 我在网上寻找了一些解决方案,大多数都非常复杂和有限,而另一些则是关于shadow的旧实现(回到Andr

  • 对不起,我的英语不好。我如何并排显示片段,这样当用户点击片段a中的一个按钮时,片段B就显示出来了(80%)?