RecyclerView---adapter.notifyDataSetChanged()不起作用

来源:互联网 发布:斑马二维码打印软件 编辑:程序博客网 时间:2024/06/01 19:30

今天在使用RecyclerView过程中adapter.notifyDataSetChanged()不起作用,通过Logcat打印发现数据源变化了,但是视图一直没变,后面发现是list集合在内存中的地址变了。

之前的写法是:

JsonObject jsonObject = new JsonParser().parse(msg.obj.toString()).getAsJsonObject();if (jsonObject.get("success").getAsBoolean()) {    jsonArray = jsonObject.get("data").getAsJsonObject().get("list").getAsJsonArray();    collectionRecyclerAdapter.notifyDataSetChanged();    LogUtils.e("snotifyDataSetChanged时jsonArray的地址: " + jsonArray.hashCode());} else {    ToastUtils.showShort(mContext, "您还没有收藏任何文章");}

collectionRecyclerAdapter.notifyDataSetChanged();//调用此方法界面不刷新

这里数据源jsonArray确实变了,但这种重新赋值的方式让该集合在内存中的地址也变了,所以adapter会认为原数据源没变

修改后的写法:

JsonObject jsonObject = new JsonParser().parse(msg.obj.toString()).getAsJsonObject();if (jsonObject.get("success").getAsBoolean()) {    JsonArray jsonArray1 = jsonObject.get("data").getAsJsonObject().get("list").getAsJsonArray();    jsonArray.addAll(jsonArray1);    collectionRecyclerAdapter.notifyDataSetChanged();    LogUtils.e("snotifyDataSetChanged时jsonArray的地址: " + jsonArray.hashCode());} else {    ToastUtils.showShort(mContext, "您还没有收藏任何文章");}

collectionRecyclerAdapter.notifyDataSetChanged();//调用此方法界面成功刷新
这里新创建了一个数据类作为中间容器存储获取到的数据,然后再调用jsonArray.add()方法,这种形式原数据源的内存地址没有改变,所以adapter.notifyDataSetChanged()就会起作用。

阅读全文
0 0
原创粉丝点击