1. 程式人生 > >Android控制元件RecyclerView和ListView的異同

Android控制元件RecyclerView和ListView的異同

在我的一篇介紹Android新控制元件RecyclerView的部落格( Android L新控制元件RecyclerView簡介 )中,一個讀者留言說RecyclerView跟ListView之間好像沒有什麼不同,我覺得這是一個好問題,應該明確地區分一下兩者的睯,所以我就研究了一下它倆之間的區別,然後也對兩者的使用有了更加深入的瞭解。

Android是一個不斷進化的平臺,Android 5.0的v7版本支援包中引入了新的RecyclerView控制元件,正如官方文件所言,RecyclerView是ListView的豪華增強版。它主要包含以下幾處新的特性,如ViewHolder,ItemDecorator,LayoutManager,SmothScroller以及增加或刪除item時item動畫等。官方推薦我們採用RecyclerView來取代ListView。

ViewHolder

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

RecyclerView.ViewHolder 被BaseAdapter使用,以將posiiton繫結到上面(可以通過API檢視 RecyclerView.ViewHolder#getPosition() 方法)。

LayoutManager

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