1. 程式人生 > >ListView與RecyclerView的區別

ListView與RecyclerView的區別

android 5.0推出了recyclerView,號稱更快的listview,那他們究竟有什麼本質上的不同呢?現在來好好探究下。

RecycleBin vs Recycler

這兩個類是重用view的核心類,其負責回收多餘的view並對新的view進行重用,實際都是使用arrayList,不同之處是RecycleBin是對View一整個item進行儲存,而Recycler則對ViewHolder進行儲存,其儲存資訊更多,能夠獲取更多的資訊。而且其快取的viewHolder一般為可見item+2。

更好的解耦

recyclerView的佈局相關操作交由layoutManager進行管理,這樣可以實現相應的水平,垂直以及網格檢視,自定義化更強,而listview需要承擔資料與佈局等多個職責。

//linearLayoutManager完成view的layout,核心方法。內部還有fill方法,從快取的list中獲取相應的回收的view
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        // layout algorithm:
        // 1) by checking children and other variables, find an anchor coordinate and an anchor
        //  item position.
// 2) fill towards start, stacking from bottom // 3) fill towards end, stacking from top // 4) scroll to fulfill requirements like stack from bottom. // create layout state }

優劣比較

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

總結:
recyclerView自定義強,如果listview佈局複雜,也能在RecyclerView.Adapter中靈活處理。

待更新ing。。。