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