适配器重新加载Android

时间:2015-04-17 14:52:42

标签: android listview caching adapter

我在想。在调用onDestroy()活动之前保存自定义适配器的最佳方法是什么?我想用项目(文本和图像)填充适配器并将其设置为listView。但是,当用户离开该活动时,我不想再次重新填充适配器,因为重新填充过于耗时。我想在调用活动inDestroy()之前将适配器值保存在某处,并检查它是否在onCreate活动上为空。

2 个答案:

答案 0 :(得分:1)

嗯,适配器是一个非常复杂的对象,它的持久保存可能是一项艰巨的任务(如果可能的话)。更常见的方法是永久保存数据集。

您担心人口时间,但适配器的序列化 - 反序列化也需要时间,而且显然比数据集单独的时间多得多,因为它包含数据集。

修改

使用Gson库(more on it)将数据集保存到SharedPreferences的小概念示例(只是持久保存数据的方法之一):

    public void saveData(ArrayList<YourDataType> data) {
        Gson gson = new Gson();
        String dataJson = gson.toGson(data);
        getSharedPreferences("your_prefs", Context.MODE_PRIVATE).edit()
                                                                .putString("key_data", dataJson)
                                                                .apply();
    }

    public ArrayList<YourDataType> restoreData() {
        String dataJson =
                getSharedPreferences("your_prefs", Context.MODE_PRIVATE)
                        .getString("key_data", "empty");
        ArrayList<YourDataType> data = null;

        if (!dataJson.equals("empty")) {
            Gson gson = new Gson();
            Type collectionType = new TypeToken<ArrayList<YourDataType>>() {}.getType();
            data = gson.fromJson(dataJson, collectionType);
        }
        return data;
    }

答案 1 :(得分:1)

您可以在应用程序类中保存适配器数据,并在重新创建活动时检查应用程序类arraylist是否为空。如果不是空的 将它分配给适配器。

但是将它存储在全局变量中,即Application类可能会使你的应用程序在堆内存上占用很多。

public class GlobalState extends Application {
ArraList<Type> arrayList = new ArrayList<type>();
public void setArraylist(ArraList<Type> arrayList) {
    this.arrayList = arrayList;
}
public ArraList<Type> getArrayList() {
    return arrayList;
}
public int dataSize() {
    return arrayList.size();
}

}