Android中的RecyclerView: 基礎知識

lum發表於2014-07-25

本週的谷歌I/O大會帶來了很多關於Android的振奮人心的訊息。可能我們需要較長的時間來消化Android L引入的新東西。

這些天我一直在研究RecyclerView,並想在此給各位分享一下到目前為止我的成果。

RecyclerView是什麼?

RecyclerView是一種新的檢視組,目標是為任何基於介面卡的檢視提供相似的渲染方式。它被作為ListView和GridView控制元件的繼承者,在最新的support-V7版本中提供支援。

在開發RecyclerView時充分考慮了擴充套件性,因此用它可以建立想到的任何種類的的佈局。但在使用上也稍微有些不便。這就是Android——要完成一件事情總不是那麼容易。

如果使用RecyclerView,你需要了解以下三個元素:

  • RecyclerView.Adapter
  • LayoutManager
  • ItemAnimator

RecyclerView.Adapter

RecyclerView包含了一種新型介面卡。它與現在使用的介面卡類似,但也稍有不同,例如它需要使用ViewHolder。使用時需要重寫兩個主要方法:一個用來展現檢視和它的持有者,而另一個用來把資料繫結到檢視上。這麼做的好處是,第一種方法只有當我們真正需要建立一個新檢視時才被呼叫,不需要檢查它是否已經被回收。

這是一個簡單的介面卡,但是事情逐漸開始變得有點複雜。在RecyclerView中,沒有一個onItemClickListener方法(至少我沒有發現)。所以介面卡是一個處理事件的良好的候選人。

如果想要從介面卡上新增或移除條目,需要明確通知介面卡。這與先前的notifyDataSetChanged()方法稍微有些不同。

LayoutManager

這個類決定檢視被放在畫面中哪個位置,但這只是它的眾多職責之一。它可以管理滾動和迴圈利用。

LayoutManager只有一個叫做LinearLayoutManager的實現類,它有1500多行程式碼。但從這一點就可以看出它有多複雜。管理器可以模擬列表檢視(包括橫向和縱向),但沒有頁首和頁尾。

為LayoutManager編寫子類不太適合新手,我們需要依靠社群來發掘RecyclerView的全部潛力。與這個例子一起,在短時間內我會上傳一個GridView控制元件的實現。

我認為這背後的關鍵是要仿照LinearLayoutManager的程式碼建立一個BaseLayoutManager,並且基於此進行擴充套件。或許support-v7的最終版本會提供更多、更好的實現。

ItemAnimator

ItemAnimator會根據介面卡上收到的通知動畫顯示檢視組的修改。基本上,它會自動顯示新增和移除條目動畫。這也不是一個簡單的類,但我們發現DefaultItemAnimator已經可以執行得很好了。

RecyclerView設定

所以最後,如果想要初始化一個執行的RecyclerView,你需要做這樣的事情:

setHasFixedSize()方法用來使RecyclerView保持固定的大小,該資訊被用於自身的優化。

總結

RecyclerView確實是一個強大的檢視,它為開發者提供了無限的擴充套件能力。學習曲線可能會非常陡峭。但我相信,不久Android社群就會發布LayoutManager超棒的實現。

我在建立一個github倉庫,在那裡可以找到這個例子。它是我計劃建立的一個擴充套件庫的基礎。你可以測試GridView的實現。歡迎各種形式的反饋。

Github上的RecyclerViewExtensions

Screenshot_2014-06-29-21-04-43

相關文章