原代码(有问题的)
private CommonAdapter<Map<String, Object>> adapter;
private List<Map<String, Object>> cxDataMaps = new ArrayList<>();
private void init() {
adapter = new CommonAdapter<Map<String, Object>>(this, R.layout.lv_general_query_data, cxDataMaps) {
@Override
protected void convert(ViewHolder holder, final Map<String, Object> maps, int position) {
holder.setText(R.id.tv_hh, maps.get("hh") + "");
holder.setText(R.id.tv_hm, (String) maps.get("bzmc"));
holder.setText(R.id.tv_dz, (String) maps.get("yhdz"));
holder.setText(R.id.tv_bz, (String) maps.get("bsh"));
holder.setOnClickListener(R.id.card_item, new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(GeneralQueryListActivity.this, PaymentActivity.class);
intent.putExtra("search_hh", (String) maps.get("HH"));
startActivity(intent);
}
});
}
};
rv.setAdapter(adapter);
getCXData();
}
private void getCXData() {
PaymentRequest req = new PaymentRequest();
Pager pager = new Pager();
pager.setPageNumber(page);
pager.setPageSize(pageSize);
req.setPage(pager);
Map<String, String> reqMap = new HashMap<>();
reqMap.put("ygid", ygid);
reqMap.put("mm", mm);
reqMap.put("imei", getIMEI());
reqMap.put("hh", hh);
reqMap.put("bzmc", bzmc);
reqMap.put("bsh", bsh);
req.setMapParam(reqMap);
String obj = JsonUtil.toJson(req);
String request = StringUtils.encodeToRemote(obj);
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), request);
cxDataMaps.clear();
payService.getCxBcList(requestBody).enqueue(new Callback<WebStoreBean>() {
@Override
public void onResponse(Call<WebStoreBean> call, Response<WebStoreBean> response) {
if (response.body() == null || response.body().getContent() == null || response.body().getContent().equals("")) {
toastMsg("没有查询到数据!" + ((response.body() != null && response.body().getMessage() != null)
? response.body().getMessage() : response.message()));
return;
}
String str = StringUtils.decodeFromRemote((String) response.body().getContent());
List<Object> list = JSON.parseArray(str);
List<Map<String, Object>> listw = new ArrayList<Map<String, Object>>();
for (Object object : list) {
Map<String, Object> map = (Map<String, Object>) object;//取出list里面的值转为map
listw.add(map);
}
cxDataMaps = listw;
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<WebStoreBean> call, Throwable t) {
toastMsg("数据查询失败:" + t.getMessage());
}
});
}
问题现象:调用notifyDataSetChanged()方法时不起作用
原因分析:代码认为cxDataMaps 这个数据源没有发生改变,所以adapter中不重新加载。
修改:数据源cxDataMaps 需要有add或者其他方法来使其发生改变。一个个Map数据直接添加到cxDataMaps 中就可以了。
List<Object> list = JSON.parseArray(str);
for (Object object : list) {
Map<String, Object> map = (Map<String, Object>) object;//取出list里面的值转为map
cxDataMaps.add(map);
}
adapter.notifyDataSetChanged();