【问题标题】:Android: Keep data for the activity, create same activity in 5 different instancesAndroid:为活动保留数据,在 5 个不同的实例中创建相同的活动
【发布时间】:2015-09-23 08:06:24
【问题描述】:

我有一个带有 2 个活动的 android 应用程序,第一个是一个 TableView,其中包含由不在 xml 中的代码生成的 5 个项目。在 xml 中它只有一个带有 id 的 TableLayout 就是这样,好的。

我想知道如何将数据保存在活动中。

场景:

  1. 单击 tableView 中的一行会打开一个包含大量数据的新活动。

  2. 点击返回按钮将直接破坏活动,而不是运行 onSaveInstanceState 所以我的数据丢失了。

  3. 再次点击“相同”行时,将重新创建活动!

所以我的问题有两个:

i) 如何不破坏第二个活动的所有数据?试过onSaveInstanceState / onRestoreInstanceState / onCreate 之类的,总是空的和销毁的!

ii) 是否可以 startActivity 并为表中的每一行提供一个“uniq”活动实例?所以这里的事情是表中的每一行现在都会开始第二个活动的新活动,我不希望每一行都使用“相同”的活动,我需要用不同的数据创建 5 个不同的完全相同的活动吗还是?

希望你能理解我的问题吗?

【问题讨论】:

  • 听起来你需要碎片。
  • 听起来他需要使用持久存储

标签: android savestate


【解决方案1】:

据我了解,当您返回活动 A 时,您希望保存活动 B 的实例。这样您就可以在相同状态下再次启动活动 B。这是不可能的,因为调用了当前活动的 back press finish() 方法。

我想到的一个简单解决方案是,在活动 B 的 onBackPressed 上,您可以根据活动 B 的当前状态更新捆绑包(这将出现在活动 A 上,对于每一行都是唯一的)。下次打开活动时B 发送此捆绑包并在 Activity B 的 onCreate 中处理此捆绑包以显示当前活动的最后保存实例。通过这个,您可以对每一行使用相同的活动。不必多次复制相同的活动。

【讨论】:

  • 谢谢,我试试看!但是当Activity A要重新运行onCreate时如何获取bundle,甚至Activity B都不会重新运行onCreate,onRestoreInstanceState也不会在这些中运行!?
  • 欢迎 :) 对于 Activity A 它不会,但对于 Activity B 它每次都会调用 onCreate。如果您使用的是 startActivtiy()。
  • 好的,但是如果 Activity A 没有重新运行如何检索捆绑集呢?
  • 我可能通过每次创建活动 B 以另一种方式解决了这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多