如何从JSON数据中筛选特定分类项目并展示到RecyclerView中
筛选指定分类JSON数据加载到RecyclerView 解决方案
修改核心逻辑
- 预先定义目标分类常量,后续切换筛选分类只需修改该值
- 分类匹配使用精准匹配,避免
contains()带来的误匹配问题 - 调整项目实例化的代码位置,保证每个项目都被正确添加到列表
修正后完整代码
@Override public void onResponse(String response) { try { // 定义你需要筛选的目标分类,切换分类只需修改这个值即可 String TARGET_CATEGORY = "Cabs"; // 要筛选Truck就改为 "Truck" JSONArray rootJsonArray = new JSONArray(response); // 每次加载数据前先清空旧列表,避免重复加载 ProjectList.clear(); for (int i = 0; i < rootJsonArray.length(); i++) { JSONObject categoryObj = rootJsonArray.getJSONObject(i); String categoryName = categoryObj.getString("category_name"); // 此处添加分类判断,精准匹配目标分类,如需忽略大小写可改用 equalsIgnoreCase() if (categoryName.equals(TARGET_CATEGORY)) { JSONArray projectArray = categoryObj.getJSONArray("projects"); // 遍历当前分类下的所有项目 for (int j = 0; j < projectArray.length(); j++) { JSONObject projectObj = projectArray.getJSONObject(j); String p_id = projectObj.getString("id"); String p_name = projectObj.getString("name"); // 每个项目对应生成一个Model,放在内层循环里 ProjectItemModel projectItemModel = new ProjectItemModel(p_id, p_name); ProjectList.add(projectItemModel); } } } // 配置RecyclerView mAdapter = new ProjectAdapter(ProjectList); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context); project_rv.setLayoutManager(layoutManager); project_rv.setAdapter(mAdapter); // 新增列表刷新通知,防止界面不更新 mAdapter.notifyDataSetChanged(); } catch (JSONException e) { e.printStackTrace(); } }
补充说明
如果需要模糊匹配分类名称,可以把判断条件改为if (categoryName.contains(TARGET_CATEGORY)),同时建议添加trim()去除字符串前后空格,避免接口返回带空格的分类名导致匹配失败。
内容的提问来源于stack exchange,提问作者AndroWaqar
相关产品推荐
相关产品推荐

