前言
最近在寫一個天氣預報的APP,主要模仿的是xcc3641/SeeWeather,感興趣的童鞋可以去看一下,非常適合學習。
本人自己的APP地址:https://github.com/w-zm/HelloWeather,主要沒有用到原APP的RxJava,還有很多功能也還沒有,希望邊模仿邊實習,還在實現中。
正文
相信很多人都應該知道RecycleRecyclerView的基本用法,如果不知道,請參考:
http://guides.codepath.com/android/Using-the-RecyclerView
好了,假設你已經基本了解了RecyclerView的用法,正如上述文章中講的那樣,RecyclerView跟ListView不一樣,當我們想要更新數據的時候,有兩種情況:
1、dataset為List<T>,也通常是這樣:
- 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,數據都是一個類對象的數據,Adapter的構造函數為:
現在的需求是每次下拉刷新天氣數據的時候,更新weather,一開始我的做法是:weather = new Weather(...), 只要你看了上面(一開始想了好久啊),就應該知道這是錯的了,后來想到了兩個辦法解決:
(1)借鑒的SeeWeather的做法:對weather對象的每個字段進行賦值:
(2)傳入List<Weather>,只不過這個List只有一個Weather對象,然后就可以每一次把原來的remove掉,再添加上新的Weather對象。如下:
dataList.clear(); //去掉之前的數據
dataList.add(weather); //添加新的Weather對象
mAdapter.notifyDataSetChanged();
好了,關于RecyclerView的數據更新問題基本就這樣了,這是本人第一次寫blog, 有許多做得不好的地方請各位指正,朕會聽的,開玩笑的,哈哈。
最后的最后,歡迎學習交流,本人郵箱: 354242964@qq.com。