Android 保存Arraylist<;Hashmap>;用于旋转后显示

Android 保存Arraylist<;Hashmap>;用于旋转后显示,android,arraylist,hashmap,Android,Arraylist,Hashmap,我可以将ArrayList保留在捆绑包中吗 我想在旋转屏幕后立即显示ListView。您可能应该覆盖saveInstanceState(Bundle)函数上的活动或片段。这将允许您设置希望在同一活动或片段的实例之间保存的任何数据。这是在旋转之间进行保存的正确方法 **更新** 由于您的ArrayList包含1个或多个Hashmaps,因此可能需要将两个对象保存到捆绑包中。一个是数组中的HashMap数,然后是每个HashMap。由于HashMaps是可序列化的,因此您可以使用Bundle.put

我可以将
ArrayList
保留在捆绑包中吗


我想在旋转屏幕后立即显示
ListView

您可能应该覆盖saveInstanceState(Bundle)函数上的活动或片段。这将允许您设置希望在同一活动或片段的实例之间保存的任何数据。这是在旋转之间进行保存的正确方法

**更新**

由于您的ArrayList包含1个或多个Hashmaps,因此可能需要将两个对象保存到捆绑包中。一个是数组中的HashMap数,然后是每个HashMap。由于HashMaps是可序列化的,因此您可以使用Bundle.putSerializable将每个HashMaps放置到Bundle中。为了在OnResume()中重新创建ArrayList,需要将所需信息放入捆绑包中


一种方法可能是这样的:让每个HashMap的键都是一些字符串,比如每个HashMap的“Hashmap1”、“Hashmap2”等等。然后,如果您知道要从bundle中检索的HashMaps的数量和密钥格式,则可以重新创建ArrayList。

您不必将其保存在
bundle
中。事实上,在
包中存储的信息似乎很多

由于您只是保存
String
对象的
HashMap
,因此可以创建一个类来缓存它,或者将其设置为类中的
静态
字段

静态字段可以使用,只要它们不包含对
活动的引用
视图
可绘制
。(可能导致内存泄漏)

最简单的方法可能是:

private static HashMap<String,String> myMap = new HashMap<String,String>();
private static HashMap myMap=new HashMap();
由于此字段是静态的,因此在重新创建活动时不会重新创建它。相反,它仍将在那里供您使用相同的值。

存储数据的更多方法:

(这些技术也适用于通过配置更改共享数据)

如何在单个应用程序中的活动/服务之间传递数据?

这取决于要共享的数据类型:

基本数据类型

要在应用程序中的活动/服务之间共享原始数据, 使用Intent.putExtras()。用于传递需要 持久化使用首选项存储机制

非持久对象

用于共享复杂的非持久用户定义对象(简称 在持续时间内,建议采用以下方法:

单身班

您可以利用应用程序组件 通过使用单例在同一进程中运行。这是一个 类,该类设计为只有一个实例。它有一个静电传感器 方法的名称,如返回实例的getInstance(); 第一次调用此方法时,它将创建全局实例。 因为所有调用者都获得相同的实例,所以他们可以将其用作 互动点。例如,活动A可以检索实例 并调用setValue(3);稍后的活动B可以检索实例并 调用getValue()检索最后一个设置值。公用静电计 字段/方法

跨活动/服务访问数据的另一种方法是 使用公共静态字段和/或方法。您可以访问这些 应用程序中任何其他类的静态字段。分享 对象,创建对象的活动将静态字段设置为 指向此对象和任何其他要使用此对象的活动 对象仅访问此静态字段

对象的WeakReference的HashMap

您还可以使用weakreference的HashMap来表示具有长字符串的对象 钥匙。当一个活动想要将一个对象传递给另一个活动时,它 只需将对象放入地图并发送密钥(这是唯一的 Long(基于计数器或时间戳)通过发送到收件人活动 意向附加条款。收件人活动使用此 钥匙

持久对象

即使应用程序看起来继续运行,系统也可能 选择终止其进程并稍后重新启动。如果你有数据 您需要从一个活动调用持续到下一个活动调用,您需要 将该数据表示为活动在运行时保存的状态 被告知它可能会消失

要共享复杂的持久用户定义对象,请执行以下操作 建议采取以下方法:

  • 应用程序首选项
  • 档案
  • 内容提供者
  • SQLite数据库
如果共享数据需要在 可以终止应用程序进程,然后将该数据放在持久 存储,如应用程序首选项、SQLite DB、文件或 内容提供者。有关更多详细信息,请参阅数据存储 关于如何使用这些组件


我知道存在
onSaveInstanceState(Bundle)
:)我只是在问如何做到这一点。