问题标签 [fragment-backstack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1025 浏览

android - 片段事务回栈不起作用?

所以我的主要活动包含两个片段。在activity_main.xml 布局文件中,我有一个(列表)片段,然后是一个框架布局,它将充当第二个片段的容器。

每次在列表片段列表视图上单击项目时,与单击的项目对应的详细信息应显示在框架布局中包含的第二个片段中。

没关系,这行得通。但是,当我使用片段事务引用创建 backStack 时,backStack 无法按预期工作。

我的期望:

1) 用户在列表视图中单击一个项目,与 itemClicked 对应的详细信息将显示在第二个片段上(在框架布局中)。

2) 用户点击列表视图中的另一个项目,该项目对应的详细信息将替换之前单击对应的详细信息。

3) 用户单击后退按钮,在列表视图中单击的上一个项目将与第二个片段中该项目对应的详细信息一起显示。

实际发生的情况:

我重复上面的步骤一和二。但是在第 3 步中,应用程序退出,因为在调用 onStop 方法后调用 onDestroy 方法。

这是主要活动。

编辑:

(用户需要 LOGCAT):

编辑:

锻炼细节片段:

锻炼清单片段:

包含数据的锻炼课程:

公共课锻炼{

0 投票
1 回答
4593 浏览

android - 如何为片段交易添加标签?

我正在像这样添加Fragment一个Activity

但是当我想找到Fragmentusing aFragmentManager时,它返回 null:

0 投票
1 回答
1032 浏览

android - 从后台堆栈检索后,片段参数不包含任何数据

所以,我有一个片段 - 片段 A - 它包含一个对象 - 对象 O - 用于设置 TextViews 和其他元素。为了实例化片段,我使用了一个静态方法 A.getInstance(O)。对象 O 是可序列化的,因此我可以使用 instance.setArguments 等通过 Bundle 将其发送到片段 A 的新实例。

我在 A 的 onCreate 方法中检索 O,并在 onViewCreated 中使用 O 设置字段。直到这里一切正常。在我用另一个片段(片段 B)替换A 并从 B 导航回 A 后,参数 Bundle 不再包含对象 O,我得到 NullPointerException。Bundle 本身不为 null,但不包含 O。

我使用这种方法来替换片段:

片段 A 也使用上述方法显示。

我究竟做错了什么?

0 投票
1 回答
370 浏览

android - android - 如何使用 onbackstackchanged 将片段 2 备份到片段 1

后台现在是:

[片段 1] -> [片段 2]

但是如何使用返回键

[片段 2] -> [片段 1]

0 投票
1 回答
3557 浏览

android - 使用 Backstack 时未加载 TabLayout ViewPager

我在我的一个片段中使用 TabLayout 和 viewPager 在选项卡下方的两个片段之间切换。

当我单击其中一个较低片段中的 FAB 时,我加载了一个新片段(用于输入)。

但是 - 当我按下 BACK 按钮时,TabLayout 会显示,但没有任何较低的片段(由页面表示)。

那么我做错了什么?

  • 有没有更好的方法来交换片段
  • 有没有办法按下后退按钮并返回正在显示的 viewPager 页面?

在 FAB 点击之前来自 BackStack 带有 TabLayout 的片段:CustomTemplatesFragment

寻呼机适配器:CustomTemplatePagerAdapter

使用 FAB 的低片段:CustomMacroFragment

TabLayout/ViewPager XML

带有 FAB XML 的片段

0 投票
2 回答
90 浏览

android - 将其他片段添加到后台堆栈?

我的应用程序使用 5 个片段,如下所示:

每个片段都被添加到后退堆栈中,因此我可以在按下后退按钮时返回。但是,当按下第 5 个片段的后退按钮时,我想返回第一个片段,如下所示:

我试图这样做:

当在第 4 个片段上添加第 5 个片段时,但是当我按下后退按钮时,它仍然让我回到第 4 个片段而不是第 1 个片段!这是以编程方式执行此操作的简单方法吗?提前致谢。

0 投票
1 回答
374 浏览

android - 片段被移除或替换后会发生什么?

Android 文档似乎没有太多关于它的内容,只是说明一旦提交事务,该片段就会被删除。碎片刚刚消失了吗?就像形而上学意义上的?还是它仍然存在于某个地方,可以在需要时调用?如果是这样,你会怎么称呼它?

作为一个更实用的问题,如果您的 Activity 包含一个片段视图和多个最终进入该视图的片段,是否有一种方法可以引用除后堆栈上最近的片段之外的片段(出于提问目的,假设它们'都放在那里)

0 投票
2 回答
700 浏览

android - addToBackStack 不适用于片段

我在过去的几十个 stackoverflow 问题上搜索了一整天,但没有找到关于...的详尽答案

碎片不是由后台自动处理的吗?还是我必须手动实施?(onBackStackChanged?)

或者我的代码中是否有任何遗漏或错误?

这是一个简化的测试版本,而不是我为复制问题而编写的整个(大)应用程序

我有 FragmentOne 替换为 Fragment 2 单击按钮

点击后退按钮应用程序退出

先感谢您

主要活动

片段一

片段二

main_content.xml

fragment_fragment_one

0 投票
0 回答
252 浏览

android - 如何正确清除整个 backstack(不弹出到顶部元素)?

使用android,我想知道这是否是清除整个后台堆栈的正确而干净的方法?

为此,我在 SO 上找到了很多答案,但它们都让我跃居榜首。我需要的只是一种简单的方法来清理后台堆栈,以便在深入到我的片段中进行一些高级处理后使其保持清洁。

我不需要(也不想)更改我当前的片段或开始一项新活动(出于性能目的)。我所需要的只是一个空的backstack,以避免进一步的麻烦。

提前致谢!

0 投票
3 回答
9415 浏览

android - 带或不带 addToBackStack() 的 FragmentTransaction::replace()

有一个添加片段和以后replace()片段的流程。所有片段都是动态添加的,但不是所有的 call addToBackStack()

在某个地方它可以添加另一个,例如:

使用replace()frgmtB 将从容器 R.id.frgment_holder 中删除 frgmtA。如果在此状态下按返回按钮,则会弹出 frgmtB。但是,即使它addToBackStack()在添加时没有调用,它会重新创建 frgmtA 吗?

如果在将片段添加到同一个容器中的流程中,使用连续的 add() 和 replace() 调用,并且有人调用addToBackStack()但有人没有调用,那么后退按钮的行为会如何?

编辑:之后

仍然找到frgmtA?如果添加 frgmtA 时也调用 addToBackStack();

文档说“这首先搜索当前添加到管理器活动的片段;如果没有找到这样的片段,则搜索当前在后台堆栈中的所有片段。”

情况将是

  1. 添加frgmtA;不调用添加到堆栈;UI 状态在此处更改;

(如果 frgmtA 不是由 add() 动态添加,而是在布局文件中使用 class="frgmtA" 进行了分隔怎么办?)。

  1. 用 frgmtB 替换();addToStack();

  2. 用 frgmtC 替换();addToStack();

那么如果stackTop 是frgmtC,希望按下后退按钮以带回第一个frgmtA 及其最后的UI 状态。