Android 基於RecyclerView實現批量操作

Songlcy發表於2016-09-07

不知道大家對淘寶,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的批量刪除,全選操作功能就全部實現了,基本的核心點就是對集合資料的刪除,以及使用一個標示來標誌該項的選中狀態。
好了,今天的內容就到這裡啦~有問題的朋友可以留言。
原始碼下載

相關文章