Android用RecyclerView實(shí)現(xiàn)圖標(biāo)拖拽排序以及增刪管理
在非編輯狀態(tài)下可以直接點(diǎn)擊圖標(biāo)進(jìn)行跳轉(zhuǎn)在編輯狀態(tài)可以拖拽、添加、刪除操作已被添加過(guò)的不能再次添加
3. 實(shí)現(xiàn)的思路用兩個(gè)RecyclerView實(shí)現(xiàn),同時(shí)維護(hù)兩個(gè)數(shù)據(jù)源,上部是常用應(yīng)用,最多可以放8個(gè);下部是全部應(yīng)用。
1. 每個(gè)應(yīng)用圖標(biāo)的狀態(tài)用枚舉Option表示// 當(dāng)前的操作狀態(tài)enum class Option { ADD, REMOVE, NONE}2. 在處于編輯狀態(tài)時(shí)創(chuàng)建ItemTouchHelper對(duì)象并attch到RecyclerView上
if (enable) { itemTouchHelper.attachToRecyclerView(binding.rvApps)}
其中,在實(shí)現(xiàn)ItemTouchHelper.Callback接口的onMove() 函數(shù)中,此時(shí)表示用戶已經(jīng)抬手,而圖標(biāo)位置已經(jīng)發(fā)生了變動(dòng),此時(shí)將界面上圖標(biāo)的順序同步回Adapter的數(shù)據(jù)源中:
val newData = mutableListOf<Pair<String, Int>>()commonAppsAdapter.data.forEachIndexed { index, _ -> val holder = recyclerView.findViewHolderForAdapterPosition(index) as AppsHolder newData.add(Pair(holder.funcUrl, index))}for (i in newData) { val sameFuncIndex = commonAppsAdapter.data.indexOfFirst { i.first == it.uid } Collections.swap(commonAppsAdapter.data, i.second, sameFuncIndex)}3. 當(dāng)應(yīng)用圖標(biāo)從上部被刪除時(shí),需要將其添加到下部,并將其重新設(shè)為可添加狀態(tài)
commonAppsAdapter.onRemoveBtnClickListener = object : OnRemoveBtnClickListener { override fun onClick(view: View, appBean: AppBean) { val theSameElementIndex = allAppsAdapter.data.indexOfFirst { it.uid == appBean.uid } if (theSameElementIndex < 0) return allAppsAdapter.data[theSameElementIndex].option = AppBean.Companion.Option.ADD allAppsAdapter.notifyItemChanged(theSameElementIndex) }}
源碼請(qǐng)前往Github
以上就是Android用RecyclerView實(shí)現(xiàn)圖標(biāo)拖拽排序以及增刪管理的詳細(xì)內(nèi)容,更多關(guān)于Android 實(shí)現(xiàn)圖標(biāo)拖拽排序以及增刪管理的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. vue實(shí)現(xiàn)web在線聊天功能2. IntelliJ IDEA設(shè)置自動(dòng)提示功能快捷鍵的方法3. Java Bean與Map之間相互轉(zhuǎn)化的實(shí)現(xiàn)方法4. SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)5. Springboot 全局日期格式化處理的實(shí)現(xiàn)6. Java使用Tesseract-Ocr識(shí)別數(shù)字7. Python使用urlretrieve實(shí)現(xiàn)直接遠(yuǎn)程下載圖片的示例代碼8. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)9. JAMon(Java Application Monitor)備忘記10. 完美解決vue 中多個(gè)echarts圖表自適應(yīng)的問(wèn)題
