前言
最近在寫一個(gè)天氣預(yù)報(bào)的APP垄琐,主要模仿的是xcc3641/SeeWeather边酒,感興趣的童鞋可以去看一下经柴,非常適合學(xué)習(xí)狸窘。
本人自己的APP地址:https://github.com/w-zm/HelloWeather,主要沒(méi)有用到原APP的RxJava坯认,還有很多功能也還沒(méi)有翻擒,希望邊模仿邊實(shí)習(xí)氓涣,還在實(shí)現(xiàn)中。
正文
相信很多人都應(yīng)該知道RecycleRecyclerView的基本用法陋气,如果不知道劳吠,請(qǐng)參考:
http://guides.codepath.com/android/Using-the-RecyclerView
好了,假設(shè)你已經(jīng)基本了解了RecyclerView的用法巩趁,正如上述文章中講的那樣痒玩,RecyclerView跟ListView不一樣,當(dāng)我們想要更新數(shù)據(jù)的時(shí)候议慰,有兩種情況:
1蠢古、dataset為L(zhǎng)ist<T>,也通常是這樣:
- dataList = createDataList(5); //這是錯(cuò)誤的做法别凹,dataList為初始傳入的List
- dataList.addAll(createDataList(5)); //這是正確的做法
我們想要更新數(shù)據(jù)的時(shí)候草讶,請(qǐng)記住這句話“whenever adding or removing elements, always make changes to the existing list”,也就是說(shuō)炉菲,請(qǐng)?jiān)谠瓟?shù)據(jù)集上更新你的數(shù)據(jù)堕战,而不是用一個(gè)新的數(shù)據(jù)集替代,記得最后要 mAdapter.notifyDataSetChanged()一下喲拍霜。
2嘱丢、還有一種情況,就是我們的dataset是一個(gè)類對(duì)象沉御,此時(shí)應(yīng)該怎么辦呢屿讽?
其實(shí)也很簡(jiǎn)單(MD我想了很久,坑胺婉伞伐谈!),那我正在寫的APP為例子试疙,
上面是部分截圖诵棵,由于還沒(méi)完成,布局暫時(shí)還很丑祝旷,請(qǐng)見(jiàn)諒履澳。其實(shí)上面的就是一個(gè)“異質(zhì)”的RecyclerView,數(shù)據(jù)都是一個(gè)類對(duì)象的數(shù)據(jù)怀跛,Adapter的構(gòu)造函數(shù)為:
現(xiàn)在的需求是每次下拉刷新天氣數(shù)據(jù)的時(shí)候距贷,更新weather,一開(kāi)始我的做法是:weather = new Weather(...), 只要你看了上面(一開(kāi)始想了好久啊)吻谋,就應(yīng)該知道這是錯(cuò)的了忠蝗,后來(lái)想到了兩個(gè)辦法解決:
(1)借鑒的SeeWeather的做法:對(duì)weather對(duì)象的每個(gè)字段進(jìn)行賦值:
(2)傳入List<Weather>,只不過(guò)這個(gè)List只有一個(gè)Weather對(duì)象漓拾,然后就可以每一次把原來(lái)的remove掉阁最,再添加上新的Weather對(duì)象戒祠。如下:
dataList.clear(); //去掉之前的數(shù)據(jù)
dataList.add(weather); //添加新的Weather對(duì)象
mAdapter.notifyDataSetChanged();
好了,關(guān)于RecyclerView的數(shù)據(jù)更新問(wèn)題基本就這樣了速种,這是本人第一次寫blog, 有許多做得不好的地方請(qǐng)各位指正姜盈,朕會(huì)聽(tīng)的,開(kāi)玩笑的配阵,哈哈馏颂。
最后的最后,歡迎學(xué)習(xí)交流棋傍,本人郵箱: 354242964@qq.com饱亮。