适配器adapter中notifyDataSetChanged()不起作用的其他总结

原代码(有问题的)

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();

猜你喜欢

转载自blog.csdn.net/jxj960417/article/details/132313567