我的代码每次创建活动时都会执行此操作 - List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();
,但我希望它在整个应用程序生命周期中保持列表,甚至在应用程序关闭时重新打开...任何帮助将不胜感激。
答案 0 :(得分:2)
您需要将其保存在某处,SQLite DB,TextFile,XML等。查看android活动生命周期http://developer.android.com/reference/android/app/Activity.html并确定要保存的位置以及要加载的位置列表。
为了澄清您需要从HashMap中提取值并使用上述方法之一以文本格式存储它们。然后,当您的应用程序启动时,您必须从存储中获取值并将其加载到HashMap中。
答案 1 :(得分:1)
在这里回答?
更新:之后,您需要在设备上缓存信息并将其设置为刷新。在onClose()中,使用由ObjectOutputStream提供的FileOutputStream将painItems ArrayList序列化为文件,以将列表写入文件。使用FileInputStream中的ObjectInputStream将其读回。我建议在onPostResume()中执行此操作,并通知空的初始化适配器更改数据集。
更新2:需要考虑以下无耻简洁的异常处理,但这应该让你开始。
String serfilename = "painitems.ser";
...
private ArrayList<HashMap<String, String>> loadListFromFile(
ArrayList<HashMap<String, String>> masterlistrev) {
try {
FileInputStream fis = openFileInput(serfilename);
ObjectInputStream ois = new ObjectInputStream(fis);
masterlistrev = (ArrayList<HashMap<String, String>>) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return masterlistrev;
}
private void writeListToFile(ArrayList<HashMap<String, String>> masterlistrev){
File myfile = getFileStreamPath(serfilename);
try {
if(myfile.exists() || myfile.createNewFile()){
FileOutputStream fos = openFileOutput(serfilename, MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(masterlistrev);
}
} catch (Exception e) {
e.printStackTrace();
}
}
答案 2 :(得分:0)
当活动关闭时,你可能会失败,如果它被销毁,但是,否则使它成为类级别属性的一部分,并在再次创建它之前检查它是否存在,但是在{{ 1}}方法可能是你最好的选择,因为它只被称为一次/活动。
现在,如果你有数据并且你想要只创建一次,那么你可能想要查看类似onCreate
(http://developer.android.com/guide/topics/data/data-storage.html)的内容,这样你就可以创建列表,然后只需将它拉出来从那时开始显示它。
我这样做了,这与你的要求有关。 SharedPreferences
的好处是你只需要设置一次,这就是你想要的。 (http://www.javamex.com/tutorials/synchronization_final.shtml)
final