【问题标题】:Android back stackAndroid回栈
【发布时间】:2017-03-22 06:39:52
【问题描述】:

我在 Android A、B、C、D 中有一个包含多个活动的应用程序。我有一个关于后台堆栈的问题。

A->B->C->D 是正常的顺序。

我的问题是:当我在活动 D 中按下返回按钮时,我必须转到活动 B,而不是返回活动 C。由于 ActivityC 有一些我想保存的 imageView,我不想使用 noHistory 来破坏 ActivityC。有可能做到这一点

A1->B1->C1->D1

后栈应该是: D1->B1->A1 。 C1 保存了一些 imageView,如果 C1 再次启动,C1 中的 imageView 将包含相同的图像。是否可以只修改ActivityC中的代码??

谢谢

【问题讨论】:

  • 不要把C加到backstack中,这样在按回的时候会直接到B。
  • 处理每个活动的 onBackPressed() 中的转换并相应地导航
  • 你想在什么时间点把图片保存到activity C中?
  • @sunil Sunny 但是如果不加C到backstack,activityC会被销毁,数据会消失
  • @uick learner 还有其他方法吗?因为我不能修改ActivtiyB和ActivityD中的代码,我只修改ActivityC中的代码

标签: android back android-task


【解决方案1】:

你应该在活动C之后调用finish(),活动D开始

startActivity(intent);
finish()

【讨论】:

  • 他不能破坏活动C,因为那里有他要保存的图像
  • 他可以使用一些东西从activity中单独加载图像,或者使用Picasso,例如,它将图像缓存在磁盘上
  • 有保存图片的方法吗?如果图片可以保存,finish()就ok了。
  • 如果您从服务器加载图像,并且不想再次浪费用户流量,您可以使用 Picasso lib,它将图像缓存在 RAM 和磁盘中。所以下一次加载会很快。
【解决方案2】:

处理每个活动的 onBackPressed()。这样在按 D 后,它会重定向到 B,然后类似于 A。

【讨论】:

  • 我可以只修改ActivityC中的代码吗?像在回退中隐藏 ActivityC 之类的东西
  • 在 D 的 onBackPressed() 中调用 B。所以它会重定向到 B 而不是 C。当你再次调用现有的 C 时,它会出现以前的状态。只需处理每个活动的 onBackPressed() 即可从 satck 调用现有活动
  • 我认为您应该在答案中添加启动模式。
  • 因为我正在写一个库。活动C 是图书馆活动。我只能在图书馆活动中修改代码。所以,我不能在 B 和 D 中进行更改
【解决方案3】:

使用onActivityResult() 活动的方法:-

下面是它的工作原理 -

在启动activity 时使用startActivityForResult() 方法

当你回去的时候
Activity D - 写完之前 -

Intent i = getIntent();
setResult(RESULT_OK);
finish();

您的D 已完成,将调用c's onActivityResult() - 保存您的数据并使用上述方法调用finish(),它将转到B's onActivityResult()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2011-10-12
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多