先上效果圖:
左側一個普通的Listview,沒什麼好說的。至于右側,當時看到原型圖第一反應是Listview+Gridview來實作(之前沒使用過RecyclerView),和主管讨論後建議我使用RecyclerLiew來實作,更加靈活,定制性更高。
OK,開幹!
先感謝鴻洋大神的這篇部落格提供的理論與技術支援
<a href="http://blog.csdn.net/lmj623565791/article/details/45059587">Android RecyclerView 使用完全解析 體驗藝術般的控件</a>
接下來進入正題。
分析一下需求,其實就是一個二級分類與三級分類,根據不同的type進行區分。顯示資料的時候,按照listview+gridview的寫法,上面一行textView顯示二級分類,下面一個gridview顯示三級分類,然後寫兩個擴充卡去管理資料。RecycleView靈活友善的地方就展現在這裡,可以組合設計出需要的布局,管理使用也更簡單。
1.布局檔案:
一目了然,沒什麼
2.資料對象:
type用于區分二級分類以及三級分類
3.ViewHolder的申明:
ViewHolder是用來緩存元素的布局資訊與資料以提高性能。listview的做法是自己實作ViewHolder來緩存結果。RecyclerView的強大之處就在于,它本身就提供了ViewHolder,我們隻要繼承自該ViewHolder就可以了,至于ViewHolder怎麼存儲,系統會自動幫我們搞定。
4.CategoryAdapter的使用:
自定義的CategoryAdapter繼承RecyclerView.Adapter,并且重寫了父類的幾個方法。這裡這幾個方法是重點,着重說明一下
(1)
用于決定元素的布局使用哪種類型,傳入的是資料源List的下标position,傳回的是一個int型标志,傳遞給onCreateViewHolder的第二個參數。
(2)
根據getItemViewType傳入的viewType來渲染構造具體的ViewHolder,傳回的是不同類型的ViewHolder
(3)
根據傳入的資料源List的下标position,得到不同的viewType,給不同的ViewHolder綁定資料
(4)
傳回lists的size
5.Activity中的使用:
元件的申明與初始化,資料與擴充卡的準備,然後就是recyclerview的具體使用了。
在給recyclerview設定網格布局管理器實作類似gridview的效果的時候,出現了一個很大的問題。二級分類占一列,三級分類占三列,是以需要根據type來動态設定不同的列數。這一塊是主管幫着寫的,調用的是mLayoutManager.setSpanSizeLookup方法,重寫裡面的getSpanSize()方法來根據type傳回不同的值,最後載顯示不同的列數。
至此,就能夠實作開始的效果圖了。關于RecyclerView的其他用法,點選事件,動畫效果等,有時間會繼續研究更新的~~