适配器重新加载 Android

Adapter reload Android

我在想。在调用 activity onDestroy() 之前保存自定义适配器的最佳方法是什么?我想用项目(文本和图像)填充适配器并将其设置为 listView。但是,我不想在用户离开 activity 并返回时再次重新填充适配器,因为重新填充太耗时了。我想在调用 activity inDestroy() 之前将适配器值保存在某处,并在 activity onCreate.

上检查它是否为空

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

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

编辑

使用 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;
    }

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

但是将它存储在全局变量中,即应用程序 class 可能会使您的应用占用大量内存。

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();
}

}