问题标签 [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 投票
1 回答
840 浏览

android - android上的任务和backstack

我对 android backstack 有疑问,请考虑我在同一个应用程序中有两个活动 A 和 B 的场景,

  1. 从 A 开始。
  2. 从 A 发射 B 使用FLAG_ACTIVITY_NEW_TASK
  3. 从 B 启动 A 使用FLAG_ACTIVITY_NEW_TASK
  4. 按返回按钮 3 次返回主屏幕。

我的问题是 backstack 如何使用这个标志,是每次创建新任务并且之前的任务被推送到后台还是在同一任务之上创建活动。

我的疑问是,如果第一个是正确的,那么后退按钮是否真的从堆栈顶部删除了活动,如果第二个是正确的,那么该标志在正确意义上的用途是什么。

提前致谢。

问候, 罗希特

0 投票
4 回答
56804 浏览

android - 从后台堆栈恢复片段时的 savedInstanceState

我可以savedInstanceState()在删除片段时保存状态,然后在将片段从返回堆栈中弹出时恢复状态吗?当我从后台堆栈恢复片段时,savedInstanceState 包始终为空。

现在,应用程序流程是:创建片段 -> 删除片段(添加到后台堆栈)-> 从后台堆栈恢复片段(savedInstanceState 包为空)。

以下是相关代码:

我认为问题在于它onSavedInstanceState()在被删除并被添加到后堆栈时永远不会被调用。如果我不能使用 onsavedInstanceState(),还有其他方法可以解决这个问题吗?

0 投票
0 回答
345 浏览

android - 离开片段的活动然后返回似乎会擦除后台堆栈

更新#3

为了进一步了解这里发生了什么,我启动了通过 startActivityForResult 加载 VideoView 的 Activity,将值 (25) 作为预期的 requestCode 提供给它。调用 Activity 的 onActivityResult requestCode 不是不是 25。(它始终是 131097,我确信它是特定且一致的,仅作为测试期间内存使用的工件)。

更新#2

我在从 VideoView 活动返回时执行了强制回栈弹出,而不是沿片段视图弹出,而是弹出容器。诡异的。

轻微更新

我添加了

在 onCreateView、onResume 和 onSaveInstanceState 上查看是否删除了 backstack 计数。它不是。所以......我猜backstack实际上并没有被删除,它只是不再被Back按钮访问了吗?几乎就好像片段的容器有焦点,而不是内容。或者其他的东西。我在这里很困惑。

结束更新

我之前问过一个类似的问题,但这有点更具体和奇怪的烦恼。

我有一系列片段,允许用户在各种分类的视频剪辑中进行选择。从视频剪辑视图开始,用户从“亮点”、“采访”等中进行选择。一旦选择了子类别,用户就选择了要观看的视频。从视频剪辑转到一个小节,然后单击“后退”按钮可以正常工作。但是,如果用户在小节中选择了一个视频,然后回击,他们将返回到小节(很好),如果他们再次回击,则没有任何反应。好像没有更多的backstack。

以下是相关代码:

后台创建:

从子菜单过渡到视频:

一如既往,感谢您的宝贵时间。

0 投票
20 回答
283335 浏览

android - 在后台堆栈上不调用片段 onResume() 和 onPause()

我在一个活动中有多个片段。在一个按钮上单击我开始一个新的片段,将它添加到后台堆栈。我自然希望调用onPause()current Fragment 和onResume()new Fragment 的方法。那么它没有发生。

登录片段.java

HomeFragment.java

我所期待的是,

  1. 单击按钮时,LoginFragmentHomeFragment替换 ,LoginFragmentonPause()和HomeFragment 调用onResume()
  2. 当按下返回时,会弹出 HomeFragment并看到LoginFragmentonPause(),并调用HomeFragmentLoginFragmentonResume()

我得到的是,

  1. 单击按钮时,HomeFragment正确替换 LoginFragment,调用 HomeFragment 的 onResume() ,但从不调用 LoginFragmentonPause() 。
  2. 按下后,HomeFragment正确弹出以显示 LoginFragment, HomeFragment 的 onPause()被调用,但 LoginFragment 的 onResume()永远不会被调用。

这是正常的行为吗?为什么当我按下后退按钮时没有调用onResume()LoginFragment

0 投票
0 回答
207 浏览

android - Android:FragmentActivity 的 ArrayIndexOutOfBoundsException(支持 V4 Lib)

这与托管在 code.google.com (http://code.google.com/p/android/issues/detail?id=22404) 上的问题 22404 相同的问题

总结一下:4个fragment在back stack,从back stack中删除dialogFragment,旋转手机。

看起来中的行是: Fragment f = fm.mActive.get(mOps[pos++]);

出于某种原因,mOps[pos++] 似乎是 -1。

我认为原因是一个 dialogFragment 被标记为删除,因此它的状态被重置。因此,在重建 backstack mOps[pos++] 时,索引返回 -1。

对此有什么想法吗?

0 投票
1 回答
8801 浏览

android - 如果有意导航返回,则始终调用 onCreate

我有一个名为 HomeActivity 的活动,它有一个 SurfaceView 并显示一个相机预览图片。如果您正在启动/重新启动此活动,它会很安静并且感觉很慢。

因此,我进行了一些调查并发现,总是以某种方式调用 onCreate 方法。在我看来,如果活动已经开始,这不应该发生?

文档说:首次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供了一个包含活动先前冻结状态的 Bundle(如果有的话)。始终跟在 onStart() 之后。

这是处理返回的方法:

编辑:

这是我离开 HomeActivity 的方式......没什么特别的:

0 投票
15 回答
159195 浏览

android - 添加到后台堆栈时如何维护片段状态?

我编写了一个在两个片段之间切换的虚拟活动。当您从 FragmentA 转到 FragmentB 时,FragmentA 被添加到后堆栈。但是,当我返回 FragmentA(通过按回)时,会创建一个全新的 FragmentA,并且它所处的状态会丢失。我觉得我和这个问题一样,但我已经包含了一个完整的代码示例来帮助根除这个问题:

添加了一些日志消息:

它从不调用 FragmentA.onSaveInstanceState 并且在您回击时创建一个新的 FragmentA。但是,如果我在 FragmentA 上并锁定屏幕,则会调用 FragmentA.onSaveInstanceState。太奇怪了......我期望添加到后台堆栈的片段不需要重新创建是错误的吗?这是文档所说的:

然而,如果您在删除片段时确实调用了 addToBackStack(),那么片段将停止,并且如果用户导航回来,它将恢复。

0 投票
2 回答
3861 浏览

android - Android中后台栈的修改

我想修改我的Android应用程序中的后台堆栈:

现在,这是流程:

A -> B -> C -> D -> E -> F

我希望能够修改返回堆栈,以便当用户进入活动 F、D 和 E 时从堆栈中删除。因此,如果用户击中背部,则流程为 F -> C。

此外,用户可以从 F 转到活动 B,这也应该删除 C、D、E 和 F。

我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但我想在触发活动时从堆栈中删除一些项目。

任何帮助表示赞赏,非常感谢。

0 投票
0 回答
1304 浏览

android - 片段、方向改变和片段后栈

我目前有一个由 ContentPane 和 ActionBarPane 组成的布局,每个都是Fragment.

每个 ContentPane 都Fragment使用 Factory 方法来实例化它自己的 ActionBarPane Fragment,这导致复杂ActionBar的一些非常简单和快速的开发。

虽然这工作得非常好,但我遇到了一个关于在方向更改后遍历 backstack 的错误。

我的“后退”实现如下所示:

其中,onBack()剥离了 ContentPane 和 ActionBar。

问题:当您达到Fragment Backstack4 个或更多(2 个 ContentPanes 及其 ActionBars)并更改方向 goBack(),第二个 ActionBar 仍然存在(第 3 个Fragment在 中Backstack)。

如预期的那样,如果没有方向更改,您最终会显示正确的 ActionBar ( Fragment1)。

记录显示,onBack()从 4Fragment秒开始Backstack,每个“pop”都被成功调用,最终只剩下 2 个Fragments(原始的 ContentPane 和它的 ActionBar)。

向前和向后导航正确使用原始的 ActionBar 而不是弹出的那个。

有没有人知道发生在方向变化上的附加片段的过程以及为什么这会导致这种奇怪的行为?

编辑

提供与以下内容同义的输出:

当出现正常行为以及出现不正确行为时,此输出是相同的......

0 投票
2 回答
245 浏览

android - 内存不足时完成一项活动

我的应用中有一个 Activity A 启动 Activity B。当我的应用程序停止并且android系统的内存不足时,我的应用程序将从后台堆栈中清除。当我再次启动我的应用程序时,在实例化 Activity B 期间发生了异常。所以我想确保 Activity B 在内存不足时完成,这样就不会发生异常。我曾尝试将finish() 放在onMemoryLow() 中,但没有奏效。我还可以做些什么?