如何根据NOMOR_KK向Spinner展示数据库列表并清除历史数据
解决Spinner切换KK编号后旧数据残留的问题
你的问题根源在于**getnamaProses集合没有在每次加载新数据前清空**,每次调用spinJSON时,新的NAMA_PROSES是追加到原有集合里,导致旧数据残留。
修改代码的关键点:
- 在填充新数据前,调用
getnamaProses.clear();清空历史数据集合 - 可选优化:复用已有的Adapter,通过
notifyDataSetChanged()更新数据,避免重复创建对象带来的性能开销
修改后的代码如下:
private void spinJSON(String response){ try { JSONObject obj = new JSONObject(response); if (obj.optString("kode").equals("true")){ dataModels = new ArrayList<>(); // 关键步骤:清空历史数据集合 getnamaProses.clear(); JSONArray dataArray = obj.getJSONArray("data"); for (int i = 0; i < dataArray.length(); i++) { DataModel dataModel = new DataModel(); JSONObject dataobj = dataArray.getJSONObject(i); dataModel.setNAMA_PROSES(dataobj.getString("NAMA_PROSES")); dataModels.add(dataModel); } for (int i = 0; i < dataModels.size(); i++){ getnamaProses.add(dataModels.get(i).getNAMA_PROSES().toString()); } // 优化:复用已存在的Adapter,无需每次新建 if (spinnerKK.getAdapter() != null) { ((ArrayAdapter<String>) spinnerKK.getAdapter()).notifyDataSetChanged(); } else { ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_item, getnamaProses); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerKK.setAdapter(spinnerArrayAdapter); } } } catch (JSONException e){ e.printStackTrace(); } }
额外说明:
- 如果
getnamaProses不是成员变量,而是每次调用方法时新建,也可以直接替换成getnamaProses = new ArrayList<>();来清空,不过调用clear()的方式更高效 - 调用
notifyDataSetChanged()能让Adapter自动感知数据变化,实时更新Spinner的显示内容
内容的提问来源于stack exchange,提问作者Farrasta K S
相关产品推荐
相关产品推荐

