У меня есть список элементов, отображаемых на экране, которые хранятся в ArrayList 'mSiteItems'.Я использую представление Recycler для моего дисплея.
Я хотел бы заявить, что мой подход корректен при работе с операцией удаления таким образом.Каждый раз, когда элемент выполняется, я удаляю его из массива и сохраняю его> Показать Snackbar в течение 2 секунд и запускаю поток, который ждет 2 секунды и
a) Удалите значение навсегда, внесите изменения в БД и т. Д. B) Процесс удаления продолжается без ожидания в течение 2 секунд, если обнаружен ДРУГОЙ размах для удаления следующего элемента.
override fun onItemDismiss(position: Int) {
proceed = true
val removedSiteItem = mSiteItemsData.removeAt(position)
val snackbar = Snackbar.make(viewBaseView, "Entry Deleted", Snackbar.LENGTH_LONG)
snackbar.setActionTextColor(Color.argb(255,255,85,0))
snackbar.setAction("Undo", { v -> undoDelete(position, removedSiteItem) })
snackbar.setDuration(2000)
snackbar.show()
Thread(object : Runnable{
override fun run() {
val copy = removedSiteItem
var deletedinThread = false
for ( count in 0 until 2000) {
Thread.sleep(1)
if (!(copy.equals(removedSiteItem))) {
eliminateSiteItemOnceAndForAll(copy)
deletedinThread = true
break
}
}
if (proceed && !deletedinThread){
eliminateSiteItemOnceAndForAll(copy)
}
}
}).start()
notifyItemRemoved(position)
}
private fun undoDelete(position: Int, value:SiteItems) {
proceed = false
mSiteItemsData.add(position, value)
notifyItemInserted(position)
}