如何在每次创建活动时都不创建列表

时间:2011-07-16 01:13:45

标签: java android list

我的代码每次创建活动时都会执行此操作 - List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();,但我希望它在整个应用程序生命周期中保持列表,甚至在应用程序关闭时重新打开...任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

您需要将其保存在某处,SQLite DB,TextFile,XML等。查看android活动生命周期http://developer.android.com/reference/android/app/Activity.html并确定要保存的位置以及要加载的位置列表。

为了澄清您需要从HashMap中提取值并使用上述方法之一以文本格式存储它们。然后,当您的应用程序启动时,您必须从存储中获取值并将其加载到HashMap中。

答案 1 :(得分:1)

在这里回答?

Activity Result Fix

更新:

之后,您需要在设备上缓存信息并将其设置为刷新。在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}}方法可能是你最好的选择,因为它只被称为一次/活动。

现在,如果你有数据并且你想要只创建一次,那么你可能想要查看类似onCreatehttp://developer.android.com/guide/topics/data/data-storage.html)的内容,这样你就可以创建列表,然后只需将它拉出来从那时开始显示它。

我这样做了,这与你的要求有关。 SharedPreferences的好处是你只需要设置一次,这就是你想要的。 (http://www.javamex.com/tutorials/synchronization_final.shtml

final