返回

Fragment中如何从JSON显示ArrayList?

Android

在 Fragment 中从 JSON 显示 ArrayList

问题

在将 ArrayList 保存为 JSON 并存储为 SharedPreferences 后,无法在 Fragment 中使用 RecyclerView 显示该 ArrayList。

解决方法

1. 读取 SharedPreferences 中的 JSON 数据:

  • 使用 getSharedPreferences() 读取 SharedPreferences。
  • 使用 getString() 读取 JSON 字符串。

2. 使用 Gson 将 JSON 转换为 ArrayList:

  • 使用 Gson 库将 JSON 字符串转换为 ArrayList。
  • 使用 TypeToken 指定 ArrayList 类型。

3. 更新 RecyclerView 适配器:

  • 使用 updateList() 方法更新适配器中的数据。
  • 使用 notifyDataSetChanged() 通知 RecyclerView 刷新数据。

代码示例

// Fragment 中读取 JSON 数据并更新适配器
SharedPreferences preferences = getSharedPreferences("CategoryInfo", MODE_PRIVATE);
String json = preferences.getString("category_info", "");

Gson gson = new Gson();
Type type = new TypeToken<ArrayList<CategoryList>>() {}.getType();
ArrayList<CategoryList> categoryList = gson.fromJson(json, type);

recyclerAdapter.updateList(categoryList);
recyclerAdapter.notifyDataSetChanged();

常见问题解答

Q1. 无法读取 SharedPreferences 数据?

  • 确保已正确设置 SharedPreferences 名称和模式。

Q2. Gson 转换失败?

  • 确保已将 Gson 库添加到 Gradle 依赖项。
  • 确认 ArrayList 类型与 JSON 数据中的一致。

Q3. RecyclerView 刷新不起作用?

  • 确保已调用 notifyDataSetChanged()
  • 检查 RecyclerView 适配器是否正确实现。

Q4. 性能问题?

  • 对于大量数据,可以考虑使用 DiffUtil 或 RecyclerView 列表动画。

Q5. 找不到 TypeToken 类?

  • 导入 com.google.gson.reflect.TypeToken 包。