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)
:)我只是在问如何做到这一点。