1. 程式人生 > >Android開發之“ListView與RecyclerView的對比”

Android開發之“ListView與RecyclerView的對比”

在Android開發最火熱的時候ListView是最長使用的一種展示多item的控制元件,而在2018年的現在已經很少有人用ListView了,使用最多當數RecyclerView了。

下面總結一下兩者的區別:

  1. 兩者的用法區別
  2. 佈局效果
  3. 對空資料的處理
  4. HeaderView與FooterView
  5. 區域性重新整理
  6. 動畫效果
  7. Item的點選事件
  8. 巢狀滾動機制

1、ListView與RecyclerView的用法區別

1)LisView的介面卡需要繼承BaseAdapter類;而RecyclerView的介面卡繼承自RecyclerView.Adapter
2)ListView需要自定義ViewHolder,與自定義ViewHolder、converView的優化(判斷是否為null);
而RecyclerView只需要繼承RecycelerView.ViewHolder,它的holder類是封裝好的
3)子item的複用,ListView需要setTag()和getTag();而RecyclerView則不需要
4)RecyclerView需要做LayoutManager工作,並且實現了佈局效果多樣化

2、佈局效果的區別

1)ListView的佈局比較單一,只有縱向效果;而RecyclerView的佈局效果較多,在LayoutManager中可以設定常見的線性佈局(橫向、縱向),表格佈局瀑布流佈局

2)RecyclerView可以在LayoutManager中自定義Layout,如scrollToPosition(),setOrientation(),findViewByPosition()等

3、空資料處理

  • ListView中可以設定空資料,呼叫setEmptyView()方法處理資料為空的情況;而RecyclerView沒有對應的方法,需要自己判斷資料是否為空

4、HeaderView與FooterView

  • ListView中可以設定addHeaderView()和addFooterView()來新增頭部item和底部item,實現下拉重新整理上拉載入的情況;而RecyclerView中沒有這兩個方法,如果需要可以在Adapter中自己定義

5、區域性重新整理

  • ListView中資料重新整理通常使用notifyDataSetChanged(),但是這種屬於全域性重新整理(每個item都要重新載入一遍);RecyclerView可以實現區域性重新整理,如notifyItemChanged()
  • ListView 也可以實現區域性item重新整理,當一個item重新整理時,在Adapter中,實現一個onItemChanged()
    方法,在方法裡面獲取這個item的position,然後呼叫getView方法來重新整理這個item的資料。

6、動畫效果

  • 在RecyclerView中,已經封裝好API來實現自己的動畫效果;有許多動畫API,例如:notifyItemChanged(), notifyDataInserted(), notifyItemMoved()等等;如果我們需要淑賢自己的動畫效果,我們可以通過相應的介面實現自定義的動畫效果(RecyclerView.ItemAnimator類),然後呼叫RecyclerView.setItemAnimator() (預設的有SimpleItemAnimator與DefaultItemAnimator);
  • 但是ListView並沒有實現動畫效果,但我們可以在Adapter自己實現item的動畫效果;

7、巢狀滾動

  • 在事件分發機制中,Touch事件在進行分發的時候,由父View向子View傳遞,一旦子View消費這個事件的話,那麼接下來的事件分發的時候,父View將不接受,由子View進行處理;但是與Android的事件分發機制不同,巢狀滾動機制(Nested Scrolling)可以彌補這個不足,能讓子View與父View同時處理這個Touch事件,主要實現在於NestedScrollingChildNestedScrollingParent這兩個介面;而在RecyclerView中,實現的是NestedScrollingChild,所以能實現巢狀滾動機制;
  • ListView就沒有實現巢狀滾動機制