【问题标题】:Android create different backstacks (tasks) and return to themAndroid创建不同的backstacks(任务)并返回给他们
【发布时间】:2015-04-24 16:38:00
【问题描述】:

我看过这篇文章:http://developer.android.com/guide/components/tasks-and-back-stack.html

如果我没看错的话,它说你可以用一个新的活动创建一个新的任务,而旧的任务仍然有一个后台堆栈。他们也在谈论回到旧的塔克斯。但是我没有找到如何实现这一点。

我想要什么:

我有一个导航抽屉。我想点击一个项目。当按下返回时,它会返回到根。但是如果单击另一个项目,则返回堆栈将保存在当前任务中。然后在这个其他项目中创建一个新的 backstack。再次单击第一项时,我想转到 backstack 的顶部,所以继续你原来的位置。

例子:

  1. A1 -> A2 -> A3(点击了抽屉项目)(所以 backstack 是 (A1, A2, A3))
  2. A1 -> A4 -> A5(最后点击的抽屉项目)
  3. A3(与在 A1、A2、A3 中)

这可能吗?

注意:我使用活动,它是一个大型应用程序,活动更易于维护。

【问题讨论】:

  • 您能否提供一个直观的示例,说明您希望 backstack 的行为是什么?
  • @ZygoteInit 我试着给你一个直观的例子。我希望这已经足够了。我想要的是记住后台堆栈,这样当我返回导航抽屉中的某个项目时,我可以继续上次单击该项目时的位置
  • 我明白了,请看我的回答
  • 你绝对不想使用多个任务来解决这个问题。这将是一个可用性噩梦。每个任务最终都在最近的任务列表中,您必须非常小心如何允许用户返回特定任务。这几乎是不可能的。不要这样做。

标签: android android-intent android-activity back-stack android-task


【解决方案1】:

NavigationDrawer 的目的是简化导航,否则对于用户和程序员来说,导航会变得复杂且繁琐。你应该做的是,每当你从根Activity (A1) 开始一个新的Activity 时,你应该这样开始:

Intent intent = new Intent(this, A2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent);

这将确保A1始终返回堆栈的根。

我不知道你想要你描述的行为的具体原因是什么,但我会认为我上面描述的内容是适当的、优雅的后台处理。无论如何,实施起来都极具挑战性您要求的行为。

【讨论】:

  • 我已经这样做了,但是谢谢。我想要的是在您按下另一个导航抽屉项目时“保存”(某种程度)后堆栈,因此当您返回时,您可以继续之前的活动。你明白吗?我觉得很难解释哈哈:P
  • 我理解,正如我所说,编写可靠地执行此操作的代码将非常困难:/
  • 啊,好吧,对不起。希望这是可能的,因为 Android 已经自己处理了这个问题,但太糟糕了。感谢您的帮助!
  • 我从问题中的链接中了解到,如果您使用标志 NEW_TASK 启动一个新 Activity 并且该 Activity 具有不同的亲和力,它会创建一个具有新 backstack 的新任务。我误会了吗?
  • 不完全是。我想在创建新任务(或以任何其他方式)时将旧的后台堆栈保留在内存中,所以首先我有 A1-A2-A3 然后我开始一个新任务并有 A1-A4。当我回到另一个项目时,我想切换任务并再次将 A1-A2-A3 退回堆栈。因此,对于导航抽屉中的每个项目,我都有不同的任务和不同的后台堆栈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2021-01-12
相关资源
最近更新 更多