1. 程式人生 > >Android 之 Recyclerview和Listview的區別

Android 之 Recyclerview和Listview的區別


相同點:

1.ViewHolder是用來儲存檢視引用的類,無論是ListView亦或是RecyclerView。

2.ListView、Recyclerview的Adapter中,getView是最重要的方法,它將檢視跟position繫結起來,是所有神奇的事情發生的地方。同時我們也能夠通過registerDataObserver在Adapter中註冊一個觀察者。

不同點:

1.在ListView中,ViewHolder需要自己來定義,且這只是一種推薦的使用方式,不使用當然也可以,這不是必須的。只不過不使用ViewHolder的話,ListView每次getView的時候都會呼叫findViewById(int),這將導致ListView效能展示遲緩。而在RecyclerView中使用RecyclerView.ViewHolder則變成了必須,儘管實現起來稍顯複雜,但它卻解決了ListView面臨的上述不使用自定義ViewHolder時所面臨的問題。

2.我們知道ListView只能在垂直方向上滾動,Android API沒有提供ListView在水平方向上面滾動的支援。或許有多種方式實現水平滑動,但是請想念我,ListView並不是設計來做這件事情的。但是RecyclerView相較於ListView,在滾動上面的功能擴充套件了許多。它可以支援多種型別列表的展示要求,主要如下:

  • LinearLayoutManager,可以支援水平和豎直方向上滾動的列表。
  • StaggeredGridLayoutManager,可以支援交叉網格風格的列表,類似於瀑布流或者Pinterest。
  • GridLayoutManager,支援網格展示,可以水平或者豎直滾動,如展示圖片的畫廊。

3.相比較於ListView,RecyclerView.ItemAnimator則被提供用於在RecyclerView新增、刪除或移動item時處理動畫效果。

4.ListView有三個Adapter的預設實現,分別是ArrayAdapter、CursorAdapter和SimpleCursorAdapter。然而,RecyclerView的Adapter則擁有除了內建的內DB遊標和ArrayList的支援之外的所有功能。RecyclerView.Adapter的實現的,我們必須採取措施將資料提供給Adapter,正如BaseAdapter對ListView所做的那樣。

5.在ListView中如果我們想要在item之間新增間隔符,我們只需要在佈局檔案中對ListView新增如下屬性即可:

 android:divider="@android:color/transparent"
  android:dividerHeight="5dp"

6.ListView通過AdapterView.OnItemClickListener介面來探測點選事件。而RecyclerView則通過RecyclerView.OnItemTouchListener介面來探測觸控事件。它雖然增加了實現的難度,但是卻給予開發人員攔截觸控事件更多的控制權限。

7.ListView可以設定選擇模式,並新增MultiChoiceModeListener,如下所示:

 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);