RecyclerView的数据更新问题

前言

最近在写一个天气预报的APP,主要模仿的是xcc3641/SeeWeather,感兴趣的童鞋可以去看一下,非常适合学习。
本人自己的APP地址:https://github.com/w-zm/HelloWeather,主要没有用到原APP的RxJava,还有很多功能也还没有,希望边模仿边实习,还在实现中。

正文

相信很多人都应该知道RecycleRecyclerView的基本用法,如果不知道,请参考:
http://guides.codepath.com/android/Using-the-RecyclerView

RecyclerView的数据更新问题_第1张图片
概览

好了,假设你已经基本了解了RecyclerView的用法,正如上述文章中讲的那样,RecyclerView跟ListView不一样,当我们想要更新数据的时候,有两种情况:
1、dataset为List,也通常是这样:

  • dataList = createDataList(5); //这是错误的做法,dataList为初始传入的List
  • dataList.addAll(createDataList(5)); //这是正确的做法

我们想要更新数据的时候,请记住这句话“whenever adding or removing elements, always make changes to the existing list”,也就是说,请在原数据集上更新你的数据,而不是用一个新的数据集替代,记得最后要 mAdapter.notifyDataSetChanged()一下哟。

2、还有一种情况,就是我们的dataset是一个类对象,此时应该怎么办呢?
其实也很简单(MD我想了很久,坑啊!),那我正在写的APP为例子,

RecyclerView的数据更新问题_第2张图片
不完整截图

上面是部分截图,由于还没完成,布局暂时还很丑,请见谅。其实上面的就是一个“异质”的RecyclerView,数据都是一个类对象的数据,Adapter的构造函数为:


RecyclerView的数据更新问题_第3张图片

现在的需求是每次下拉刷新天气数据的时候,更新weather,一开始我的做法是:weather = new Weather(...), 只要你看了上面(一开始想了好久啊),就应该知道这是错的了,后来想到了两个办法解决:
(1)借鉴的SeeWeather的做法:对weather对象的每个字段进行赋值:


RecyclerView的数据更新问题_第4张图片

(2)传入List,只不过这个List只有一个Weather对象,然后就可以每一次把原来的remove掉,再添加上新的Weather对象。如下:
dataList.clear(); //去掉之前的数据
dataList.add(weather); //添加新的Weather对象

mAdapter.notifyDataSetChanged();

好了,关于RecyclerView的数据更新问题基本就这样了,这是本人第一次写blog, 有许多做得不好的地方请各位指正,朕会听的,开玩笑的,哈哈。
最后的最后,欢迎学习交流,本人邮箱: [email protected]

你可能感兴趣的:(RecyclerView的数据更新问题)