Android 基於RecyclerView實現批量操作
不知道大家對淘寶,JD的App購物車有木有印象,購物車中的多個商品可以批量刪除,支付,分享等等。。先來看張圖,該圖來自水友截圖:
上圖來自淘寶購物車介面。可以看到,我們對商品可以進行批量刪除,移到收藏夾,分享功能。ok,今天我們就用RecyclerView來實現類似批量更新的操作。
首先,我們來簡單分析下要實現這樣的功能,有哪些核心點:
(1)標示選中的商品,即RecyclerView中的Item。
(2)將選中的多個商品進行儲存。
(3)對儲存的商品進行批量操作,例如,刪除。
(4)更新列表顯示最新資料。
上面4步中有難度的地方估計就是對選中的內容進行儲存,以及如何標示被選中的內容。
來看我們今天要實現的介面:
(1)長按Item底部滑出操作選單,Item被選中。
(2)點選Item的checkbox選中後,點選刪除或全選進行批量操作。
(3)在列表中的Item有checkbox,大家還需要注意RecyclerView複用導致的多選問題。解決方案我給大家列舉兩種:
1> 在Item對應的實體類中新增一個flag變數來標示是否被選中,然後在生成Item的方法中根據該值來設定checkbox是否被選中。
2> 使用一個集合來儲存當前選中的Item的Position。然後根據判斷集合中是否有Position來決定checkbox是否被選中。
大致的實現流程就是這些,下面來看具體的核心程式碼:
(1)RecyclerView的資料介面卡:
程式碼很簡單,就是對Item的根據局新增了單擊,長按,checkbox的單擊事件,利用介面回撥將事件傳遞到Activity主介面。可以看到在checkbox的單擊事件中,我們根據當前checkbox的選中狀態對實體類的isSelect進行賦值,儲存下當前的狀態,避免複用帶來的多選問題。
(2)實體類:
(3)處理點選事件:
上面程式碼中核心程式碼在checkbox的點選回撥事件中:checkBoxClick:
下面來看addOrRemove方法:
該方法中我們使用HashSet型別的positionSet變數儲存選中的Item的Position。即點選checkbox分兩種狀態:選中,取消選中。即分別對應了選中將position新增到positionSet集合和取消選中將對應的Position從positionSet中刪除。最後當positionSet的集合為0時,即最後一個Item取消選中,下面的選單開啟動畫隱藏。
(4)刪除操作:
相信大家都知道什麼意思了,很簡單,就是對集合中的資料進行操作,將positionSet集合中儲存的Postion對應的資料取出,然後從資料集合中刪除對應資料,呼叫notifyDataSetChanged方法來更新列表。最後別忘記清空positionSet集合(代表了本次刪除的操作結束)。
(5)全選:
當Item沒有全選時,點選全選,Item被全部選中。反之,取消全選。很簡單,相信大家一看就明白,不多說了。
到此,基本上對於RecyclerView的批量刪除,全選操作功能就全部實現了,基本的核心點就是對集合資料的刪除,以及使用一個標示來標誌該項的選中狀態。
好了,今天的內容就到這裡啦~有問題的朋友可以留言。
原始碼下載
相關文章
- 基於ansibleRole實現批量部署lamp平臺LAMP
- 使用PrepareStatement實現批量插入操作REST
- Android使用RecyclerView實現二級列表AndroidView
- 基於 RecyclerView 實現的歌詞滾動自定義控制元件View控制元件
- Android實現RecyclerView巢狀流式佈局AndroidView巢狀
- Android 輕鬆實現 RecyclerView 懸浮條AndroidView
- Android RecyclerView 通用介面卡的實現AndroidView
- [轉]Android輕鬆實現RecyclerView懸浮條AndroidView
- 基於ARouter的Android元件化實現Android元件化
- Android基於MediaBroswerService的App實現概述AndroidROSAPP
- Android RecyclerView實現頭部懸浮吸頂效果AndroidView
- Android 時間軸的實現(RecyclerView更簡單)AndroidView
- Android中使用RecyclerView + SnapHelper實現類似ViewPager效果AndroidViewpager
- Android實現帶動畫的下拉重新整理RecyclerViewAndroid動畫View
- 基於Socket.IO實現Android聊天功能Android
- 基於CC的Android MVVM 元件化實現AndroidMVVM元件化
- 12_基於 AspectJ 配置檔案實現 AOP 操作
- 基於 Vuex 的時移操作(撤回/恢復)實現Vue
- Android中的RecyclerView: 基礎知識AndroidView
- 說說在 Android 的 RecyclerView 中如何實現下拉刷AndroidView
- Android通過startService實現批量下載示例Android
- 基於Android平臺實現人臉識別Android
- 如何基於COLA架構快速實現一個CRUD操作架構
- RecyclerView進階(一)RecyclerView實現雙列表聯動View
- android利用RecyclerView+自定義View實現城市選擇介面AndroidView
- 手把手教你實現Android RecyclerView上拉載入功能AndroidView
- 基於DLNA實現iOS,Android投屏:SSDP發現裝置iOSAndroid
- android原生開發recyclerview基礎例項AndroidView
- 基於Android平臺的RouterSDK設計與實現Android
- 基於DLNA實現iOS,Android投屏:基本概念iOSAndroid
- SOLIDOWORKS二次開發實現批量操作功能Solid
- 實現RecyclerView下拉重新整理View
- Android入門教程 | RecyclerView實際使用AndroidView
- RecyclerView定製:通用ItemDecoration及全展開RecyclerView的實現View
- 基於android的智慧導診的設計與實現Android
- 基於DLNA實現iOS,Android投屏:SOAP控制裝置iOSAndroid
- 基於DLNA實現iOS,Android投屏:訂閱事件通知iOSAndroid事件
- [Android App]IFCTT,即:If Copy Then That,一個基於IFTTT的"This"實現AndroidAPP