一、RecyclerView
RecyclerView是Android5.0以後推出的,布局相關操作交由layoutManager進行管理,支援 線性布局、網格布局、瀑布流布局 三種,而且同時還能夠控制橫向還是縱向滾動,自定義化更強,而listview需要承擔資料與布局等多個職責。
而 LayoutManager 隻是一個抽象類而已,系統已經為我們提供了三個相關的實作類 LinearLayoutManager(線性布局效果)、GridLayoutManager(網格布局效果)、StaggeredGridLayoutManager(瀑布流布局效果)。
RecyclerView 基礎使用關鍵點同樣有兩點:
繼承重寫 RecyclerView.Adapter 和 RecyclerView.ViewHolder
設定布局管理器,控制布局效果
RecyclerView 相比 ListView 在基礎使用上的差別主要有如下幾點:
ViewHolder 的編寫規範化了
RecyclerView 複用 Item 的工作 Google 全幫你搞定,不再需要像 ListView 那樣自己調用 setTag
RecyclerView 需要多出一步 LayoutManager 的設定工作
二、ListView
1. 繼承重寫 BaseAdapter 類
2. 自定義 ViewHolder 和 convertView 一起完成複用優化工作
ListView 提供了 setEmptyView 這個 API 來讓我們處理 Adapter 中資料為空的情況,隻需輕輕一 set 就能搞定一切。代碼設定和效果如下
mListView = (ListView) findViewById(R.id.listview);
mListView.setEmptyView(findViewById(R.id.empty_layout));//設定内容為空時顯示的視圖
3.ListView的優化
ListView優化一直是一個老生常談的問題,不管是面試還是平常的開發中,ListView永遠不會被忽略掉,那麼這篇文章我們來看看如何最大化的優化ListView的性能。
1.在adapter中的getView方法中盡量少使用邏輯
2.盡最大可能避免GC
3.滑動的時候不加載圖檔
4.将ListView的scrollingCache和animateCache設定為false
5.item的布局層級越少越好
6.使用ViewHolder
RecycleBin vs Recycler
這兩個類是重用view的核心類,其負責回收多餘的view并對新的view進行重用,實際都是使用arrayList,不同之處是RecycleBin是對View一整個item進行存儲,而Recycler則對ViewHolder進行存儲,其存儲資訊更多,能夠擷取更多的資訊。而且其緩存的viewHolder一般為可見item+2。
優劣比較
listView:
優點:
1. OnItemClickListener
對item的點選事件能夠很快相應,實作簡單。
2. CursorAdapter
遊标擴充卡能很友善與item資料綁定。
3. 能夠在xml中輕松定義divider
缺點:
1. item的動畫,decoration與觸摸互動實作起來困難
recyclerView:
優點:
1. 高度自定義化的onClick事件,能夠在viewHolder建立的時候為view設定監聽器,通過view.setTag的方式,把dataList裡面的值或者position傳入view中綁定,再在監聽器實作中,擷取參數并回調相應的接口,并通過自定義的接口回傳給外部的activity。
2. layoutManager的靈活使用,支援水準線性滑動,以及瀑布流形式。
3. ItemAnimator支援多種item添加以及删除動畫,更好的互動效果
缺點:
1. 實作相較listview會較複雜