问题标签 [back-stack]

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 投票
3 回答
8160 浏览

android - 当 ViewPager 中的 Fragment 从 BackStack 中保留时 WebView 重新加载

这是Fragment包含WebView.
WebFragment.java

我还有 2 个基本片段(没有WebView)。然后我将所有这些 3Fragments放入ViewPager(WebFragmentFragment1分别Fragment2) using FragmentAdapter。我添加android:configChanges="orientation|screenSize"AndroidManifest.xml(所以WebView不会重新配置更改)。
现在我的问题是,在运行应用程序时,我将第一页(WebFragmet)更改ViewPager为第二页(Fragment1),然后我又回到了第一页。所以没有问题WebFragment

现在我再次更改了ViewPager这样的WebFragment--> Fragment1-->Fragment2并通过反转上述操作的方向返回到第一页。但当时我看到WebViewinWebFragment正在重新加载。

还有一个问题,每当WebView开始加载时,我都会看到 2 个日志条目。

所以我的问题是:
1)如何防止在保留WebView时重新加载? 2)为什么这里加载两次?WebFragmentBackStack
WebView

只要看到这个问题并帮助我(防止 WebView 在 FragmentPagerAdapter 中重新加载?)。

0 投票
0 回答
1062 浏览

android - 防止android杀死fragment

我正在尝试创建一个在我的应用程序生命周期的整个期间都存在的片段。我希望它只创建一次并在调用活动的 onDestroy() 函数时被销毁(因此,理想情况下,永远不要......)。我知道这违背了 android 在引入片段时的意图,但是我的项目的性质使得改变这个要求是不可能的。

我想澄清的是,整个后台业务。我对 backstack 到底代表什么有点困惑,我知道它是以前的 UI 状态的堆栈,但这是否意味着它是用户当前迭代的片段的堆栈?或者这是一堆 FragmentTransactions,当你 popBackStack() 时,它“撤消”最后一个提交的 FragmentTransaction(如果是这样,“撤消”一个 FragmentTransaction 是什么意思......它只是删除一个添加的片段吗?添加一个已删除的片段,如果我希望它分离一个片段而不是在调用 popBackStack() 时将其删除怎么办?)?

最后,调用 detach() 会阻止 Android 杀死我的 Fragment(不像 remove() 和 replace() 会立即调用 onPause()、onStop()、onDestroy()、onDestroyView() 序列)?如果是这样,我如何让popBackStack()分离()我的片段(我什至可以这样做吗?)......甚至应该将它添加到后台堆栈?

对我的项目的进一步限制 - 我希望所有其他片段都能正常运行(即它们应该能够被操作系统随意销毁/创建)。这个片段不会打开另一个片段,但是如果我点击后退按钮,我希望它返回到打开它的任何片段(不破坏片段)。

任何关于我上面列举的问题的指导和/或澄清将不胜感激!!提前致谢!

0 投票
4 回答
1794 浏览

android - 安卓活动管理

我有一个关于活动管理的问题。假设我有 4 个活动,例如 A1、A2、A3、A4。现在 A1 有一个按钮来启动活动 A2。A2 有 2 个启动 A3 或 A4 的按钮,A3 有 2 个启动活动 A4 和 A1 的按钮。A4 有 3 个按钮来启动活动 A1、A2、A3 我在任何这个活动中都不使用完成方法。所以现在用户点击任何活动的任何按钮而不是检查活动,这已经在后台了吗?如果是,则此活动不会生成新实例并启动已经在后台的活动。否则它会产生新的坚持。

0 投票
1 回答
3367 浏览

android - addToBackStack 不起作用,关闭活动而不是弹出片段

我有一个问题,我无法在任何地方找到解决方案。

当我按下后退按钮时,我的应用程序不会返回到上一个片段,而是关闭活动。

我有一个显示 4 个片段的活动:[1]、[2]、[3]、[4]。我可以使用操作栏在前 3 个片段之间切换,我不想将它们添加到后台堆栈。

片段 [4] 是片段 [3] 中所选项目的详细视图。当我按下 [4] 时,我想返回片段 [3],而不是关闭应用程序。

通过放置片段的活动以这种方式完成转换:

其中 toBackStack 始终为假,除非从 [3] 到 [4] 的转换。

如果我在每次转换中都传递 toBackStack true,则活动无论如何都会关闭。

0 投票
0 回答
577 浏览

android - 自定义 TaskStack 完成通知中的父活动

我在使用TaskStack通知时遇到问题。当点击通知时,我试图保持我的应用程序的导航流程。

我的应用的导航风格是这样的:

PrincipalActivity(父母)→ SecondaryActivity(孩子)

有时 GCM 服务可以推送启动的通知SecondaryActivity。可能存在或不存在的实例,PrincipalActivity因此我从 a 实现了一个自定义 PendingIntent TaskStack(见下文)。这在PrincipalActivity暂停或关闭时有效。

当用户PrincipalActivity在前台单击通知时,问题就出现了:PendingIntent调用PrincipalActivity.onDestroy()并创建一个新的活动堆栈,丢失所有数据。

服务推送通知:

AndroidManifest.xml

我尝试了 ( , ) 的标志,PendingIntent并对FLAG_UPDATE_CURRENT清单( , , ) 中的活动进行FLAG_ONE_SHOT了不同的实验,但没有运气。launch_modesingleTasksingleTopsingleInstance

TaskStack当父级已经在前台并且不丢失数据时,如何使用活动和父级创建上述自定义?(理想情况下,重用堆栈中的活动?)

0 投票
1 回答
7360 浏览

android - 后堆栈中的配置更改片段现在共享 FrameLayout?

应用程序问题:

当方向改变时,应用程序会遇到以下问题:

  • FragmentA 和 FragmentC 现在都占用 FrameLayout 容器。

什么工作:一切都按我的意愿工作......在旋转屏幕之前。

活动简介:

EditActivity 目的:编辑集合和项目字段。

此活动以编程方式创建的片段:

  • FragmentA - 用于编辑集合字段的片段
  • FragmentB - 集合中项目的 ListFragment
  • FragmentC - 用于编辑项目字段的片段。

初始布局:FragmentA 位于 FragmentB 之上,每个都有自己的 FrameLayouts。

当用户单击 FragmentB 的列表视图项目时:将 FragmentA 替换为 FragmentC 以允许用户编辑该项目的字段。现在 FragmentC 位于 FragmentB 之上。

这似乎是一个非常简单的概念:活动的顶部用于编辑整个集合的属性或集合中的单个项目。我觉得我在布局上没有做任何奇妙的事情,所以我有点困惑,手机(模拟器)的简单旋转会导致这些问题,我花了这么多时间试图解决。

为什么Android Fragment Guide 示例对我不起作用:他们的示例很像我正在做的事情,但是他们的详细片段要么在新活动中打开,要么在当前活动中的自己的框架中打开,他们没有做任何事情交换片段,因此我无法收集他们将如何使用 onSaveIstanceState 来保留可见的片段,然后在 onCreate 中使用该信息来重新创建在方向更改之前存在的 UI。

编辑:通过将 listfragment 放入 XML 中解决了一个问题,这解决了永久旋转的“加载...”问题。

0 投票
1 回答
502 浏览

android - Android:将结果发送到清理 BackStack 顶部的 Activity

我有 3 个活动:A、B、C。

我希望活动按如下方式工作:

A startActivityForResult B; B 可以启动 C 或将结果发送给 A;C 可以返回 B 或将结果发送给 A。

当 B 将结果发送给 A 时,B 必须从 backstack 中移除。当 C 向 A 发送结果时,B 和 C 必须从 backstack 中移除。

我无法将结果从 C 发送到 A。这意味着必须重新使用 A(未重新创建)并且必须调用 onActivityResult() 来处理结果:

我已尝试使用此代码,但重新创建了 A 并且未调用 onActivityResult() !

有什么想法可以解决这个问题吗?谢谢

0 投票
2 回答
66 浏览

android - 如何在android应用程序中实现以下流程?

我的应用程序收到推送通知,并启动其中一项活动。现在,

  1. 新闻主页
  2. 从主屏幕重新启动应用程序(应用程序启动主要活动)
  3. 按回

例如活动A-->B--->C

  1. 通知启动“C”
  2. 按 C 上的 HOME
  3. 重新启动应用程序(“A”启动)
  4. 按回

现在出现了奇怪的现象,按下返回将用户带到通知点击时启动的相同活动,在这种情况下,它将用户带到“C”

我不希望这个流程..在主要活动上按返回键应该退出应用程序。

有什么帮助吗?

0 投票
1 回答
9706 浏览

android - 回栈事务后如何持久化分片数据?

我有一个包含片段“列表”的活动,单击其中一个项目时,它会将自身替换为“内容”片段。当用户使用后退按钮时,他再次被带到“列表”片段。
问题是片段处于其默认状态,无论我尝试什么持久化数据。

事实:

  1. 两个片段都是通过public static TheFragment newInstance(Bundle args),setArguments(args)Bundle args = getArguments()
  2. 两个片段都在同一级别,直接位于FrameLayout父活动的 a 内部(即不是嵌套片段)
  3. 我不想打电话setRetainInstance,因为我的活动是一个主/细节流,它在较大的屏幕上有一个 2 窗格布局。7" 平板电脑有 1 个纵向窗格和 2 个横向窗格。如果我保留“列表”片段实例,它会(我认为)屏幕旋转搞砸
  4. 当用户点击'list'片段中的一个项目时,'content'片段通过 显示FragmentTransaction#replace(int, Fragment, String),具有相同的ID但不同的标签
  5. 我确实覆盖了onSaveInstanceState(Bundle),但这并不总是由框架调用,根据文档“在许多情况下,片段可能大部分被拆除(例如当放置在没有显示 UI 的后堆栈上时),但它的状态在其拥有的活动实际需要保存其状态之前,不会被保存。”
  6. 我正在使用支持库

从上面的第5条,我猜低端设备需要在片段事务后恢复内存可能会调用Fragment#onSaveInstanceState(Bundle). 但是,在我的测试设备(Galaxy Nexus 和 Nexus 7)上,该框架不会调用该方法。所以这不是一个有效的选择。

那么,我怎样才能保留一些片段数据呢?传递给Fragment#onCreate,Fragment#onActivityCreated等的包总是null.

因此,我无法从全新的片段启动到回栈恢复。

注意:可能相关/重复的问题

0 投票
1 回答
666 浏览

android - Android - 管理片段交换

我的应用程序有一个活动 A,它在创建时加载 ListFragment -> Fa。

在选择其中一个项目时,Fa 被添加到 BackStack 并被另一个具有不同数据集的 Fa 实例替换。

在这个 Fa 的新实例中选择一个项目将其放入 BackStack 并用第三个 ListFragment -> Fb 替换它,其布局不同。

Fb 旨在以分页方式显示列表,底部有 2 个按钮,(上一个)和(下一个)。

现在我希望当用户单击下一个按钮时,我应该使用 Fb 的新实例显示列表的下一页,但我不想将其前一个实例添加到 backstack,以便当用户按下设备上的后退按钮时,他应该被带到Fa的第二个实例而不是Fb的前一个实例。

我能够实现所有的前向遍历位以及上一个和下一个按钮任务,但是现在当我按下后退按钮时,Fa 的第二个实例出现了,但是 Fb 的最后一个实例没有被删除并且可以在背景。

当我按下后退按钮时,如何删除所有 Fb 实例并仅显示 Fa。