适配器重新加载 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();
}
}
我在想。在调用 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();
}
}