RecyclerView的數(shù)據(jù)更新問題

前言

最近在寫一個天氣預(yù)報的APP,主要模仿的是xcc3641/SeeWeather,感興趣的童鞋可以去看一下,非常適合學(xué)習(xí)。
本人自己的APP地址:https://github.com/w-zm/HelloWeather,主要沒有用到原APP的RxJava,還有很多功能也還沒有,希望邊模仿邊實習(xí),還在實現(xiàn)中。

正文

相信很多人都應(yīng)該知道RecycleRecyclerView的基本用法,如果不知道,請參考:
http://guides.codepath.com/android/Using-the-RecyclerView

概覽

好了,假設(shè)你已經(jīng)基本了解了RecyclerView的用法,正如上述文章中講的那樣,RecyclerView跟ListView不一樣,當(dāng)我們想要更新數(shù)據(jù)的時候,有兩種情況:
1、dataset為List<T>,也通常是這樣:

  • dataList = createDataList(5); //這是錯誤的做法,dataList為初始傳入的List
  • dataList.addAll(createDataList(5)); //這是正確的做法

我們想要更新數(shù)據(jù)的時候,請記住這句話“whenever adding or removing elements, always make changes to the existing list”,也就是說,請在原數(shù)據(jù)集上更新你的數(shù)據(jù),而不是用一個新的數(shù)據(jù)集替代,記得最后要 mAdapter.notifyDataSetChanged()一下喲。

2、還有一種情況,就是我們的dataset是一個類對象,此時應(yīng)該怎么辦呢?
其實也很簡單(MD我想了很久,坑?。?,那我正在寫的APP為例子,

不完整截圖

上面是部分截圖,由于還沒完成,布局暫時還很丑,請見諒。其實上面的就是一個“異質(zhì)”的RecyclerView,數(shù)據(jù)都是一個類對象的數(shù)據(jù),Adapter的構(gòu)造函數(shù)為:



現(xiàn)在的需求是每次下拉刷新天氣數(shù)據(jù)的時候,更新weather,一開始我的做法是:weather = new Weather(...), 只要你看了上面(一開始想了好久啊),就應(yīng)該知道這是錯的了,后來想到了兩個辦法解決:
(1)借鑒的SeeWeather的做法:對weather對象的每個字段進行賦值:



(2)傳入List<Weather>,只不過這個List只有一個Weather對象,然后就可以每一次把原來的remove掉,再添加上新的Weather對象。如下:
dataList.clear(); //去掉之前的數(shù)據(jù)
dataList.add(weather); //添加新的Weather對象

mAdapter.notifyDataSetChanged();

好了,關(guān)于RecyclerView的數(shù)據(jù)更新問題基本就這樣了,這是本人第一次寫blog, 有許多做得不好的地方請各位指正,朕會聽的,開玩笑的,哈哈。
最后的最后,歡迎學(xué)習(xí)交流,本人郵箱: 354242964@qq.com。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容