ListView 與 RecyclerView 簡單對比
簡單使用:
ListView繼承重寫BaseAdapter類;
自定義ViewHolder與convertView的優化(判斷是否為空);
RecyclerView繼承重寫RecyclerView.Adapter與RecyclerView.ViewHolder
設定LayoutManager,以及layout的佈局效果
區別:
ListView的佈局比較單一,只有一個縱向效果
RecyclerView的佈局效果豐富,可以在LayoutMananger中設定:線性佈局(橫向縱向),表格佈局,瀑布流佈局,還可以在layoutMananger的API中自定義Layout(scrollToPosition(),findViewByPosition()等等)
空資料處理:
ListView中有個setEmptyView()用來處理資料為空的情況
RecyclerView沒有這個API,需要進行資料判斷來實現資料為空的情況
HeaderView與FooterView:
ListView通過addHeaderView()與addFooterView()來新增頭部底部item,來實現上拉重新整理下拉載入的情況,並不會影響Adapter的編寫
RecyclerView沒有這兩個API,我們需要時可以在Adapter中自己編寫,根據ViewHolder的Type與View來實現,但是這樣會影響到Adapter的資料,新增了Header與Footer後實際的position會大於資料的position
區域性重新整理:
在ListView中重新整理資料是用notifyDataSetChanged(),但是這種重新整理資料是全域性重新整理的,每個Item的資料都會重新載入一遍,就會非常消耗資源
RecyclerView可以實現區域性重新整理,notifyItemChanged()
但是要在ListView實現區域性重新整理,我們可以在Adapter中實現一個onItemChanged(),在方法中獲取這個item的position(可以通過getFirstVisiblePosition()),然後呼叫getView()來重新整理這個item的資料
動畫效果:
RecyclerView已經封裝好API來實現動畫效果,例如notifyItemChanged() notifyItemMoved(),如果需要自定義的動畫效果可以通過相應的介面實現自定義的動畫效果RecyclerView.ItemANimator類,然後呼叫RecyclerView.setItemAnimator()
ListView沒有動畫效果的實現,但我們可以在Adapter自己實現item的動畫效果
Item點選事件:
ListView中有onItemClickListener(),onItemLongClickListener(),onItemSelectedListener(),但是新增HeaderView與FooterView就不一樣了,HeaderView與FooterView都會算進position,就有可能丟擲陣列越界。
我們可以在getItemId()中通過返回id來標識相應的item;但是我們可以在Adapter中針對每個Item寫在getView()中比較合適
Recycle讓View中提供了addOnItemTouchListener() 監聽item的觸控事件,我們可以通過RecyclerVIew的addOnItemTouchListener()加上Gesture Detector來實現類似ListView那樣監聽某個item某個操作方法。
相關文章
- RecyclerView與ListView比較View
- RecyclerView超簡單demo(區域性更新取代ListView)View
- ListView簡單使用View
- nginx與lighttpd效能簡單對比薦Nginxhttpd
- RecyclerView的簡單使用View
- 列表(recyclerView、listView及其相關)View
- RxJava2與RxJava1的簡單對比RxJava
- 深入理解Android中的快取機制(二)RecyclerView跟ListView快取機制對比Android快取View
- 日誌收集工具簡單對比
- QT - 13.1.1 ListView 的簡單使用QTView
- android:ListView 的簡單用法AndroidView
- 使用 Flex 佈局與其他普通佈局的簡單對比Flex
- 簡單介紹SpringSecurity框架簡介及與shiro特點對比SpringGse框架
- Kotlin和Java的簡單對比KotlinJava
- ROWID與ROWNUM的簡介與對比
- 用ListView簡單實現滑動列表View
- 簡單實現具有彈性的ListViewView
- Android ListView初始化簡單分析AndroidView
- Android RecyclerView 簡介與例項AndroidView
- RecyclerView如何setEmptyView及淺談ListView的setEmptyView原理View
- Python實現簡單的excel對比工具PythonExcel
- React 中的新舊 Context 簡單對比ReactContext
- Oracle/MySQL/PostgreSQL 簡單查詢的效能對比OracleMySql
- 對比SQL中簡單巢狀查詢與非巢狀查詢CFSQL巢狀
- 【OpenCv】OpenCv原始版本與新版本(2.4.10)的一個簡單對比OpenCV
- onMeasure簡單方法 完美解決ListView與ScollView衝突問題!View
- Play框架與NodeJS的簡單比較框架NodeJS
- RecyclerView Part 1:為ListView專家寫的基礎View
- 簡單對比一下CORS跨域與Nginx反向代理跨域優劣CORS跨域Nginx
- EasyReact的簡單試用及和RAC的對比React
- 簡單對比git pull和git pull --rebase的使用Git
- HTTPS SPDY和 HTTP/2效能的簡單對比HTTP
- Delphi寫的讀狗程式的簡單逆向對比.
- React Native學習之 ListView 的簡單使用React NativeView
- android RecyclerView佈局真的只是那麼簡單!AndroidView
- ListView或RecyclerView子項item複用資料錯亂View
- Google Guice 與 Noear Solon 的簡單對照GoGUI
- Android 時間軸的實現(RecyclerView更簡單)AndroidView