天天看點

RecyclerView和ListView差別

一、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會較複雜