gpt4 book ai didi

android - RecyclerView - 正确实现 SnackBar UNDO 删除 (Kotlin)

转载 作者:行者123 更新时间:2023-11-30 00:15:38 24 4
gpt4 key购买 nike

我已经成功地实现了滑动以从 recyclerView 中删除一个项目。

当一个项目被删除时,我想显示一个带有按钮的 SnackBar,如果您无意中删除了该项目,可以让您重新添加该项目。

我选择将刷过的项目存储在一个变量中并删除它。

然后,如果用户按下撤消按钮,它将被添加回原来的位置。

我是这样做的:

override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {

val position = viewHolder.adapterPosition //get position which is swipe

if (direction == ItemTouchHelper.LEFT) { //if swipe left
val tmp = activeSubs[position] //here I store the temporary Item
activeSubs.removeAt(position)
adapter!!.removeItem(position)

//TODO: translate
val layout = find<View>(R.id.active_subs_recycler)
Snackbar.make(layout, "Subscription Deleted", Snackbar.LENGTH_LONG)
.setAction("Undo", { _ ->
activeSubs.add(position-1, tmp)
adapter!!.notifyItemInserted(position-1)
adapter!!.notifyDataSetChanged()
}).show()
}
}

问题是当我点击 UNDO 按钮时,该项目没有添加回 recyclerView。我做错了什么?

最佳答案

你有一个适配器方法删除项目

adapter!!.removeItem(position)

即从适配器列表中删除该项目并通知回收站 View 。

然而,撤消方法不使用@Submerged 指出的适配器列表,请尝试创建等效方法

adapter!!.addItem(position)

因为目前您正在将项目添加到不同的列表对象,而不是适配器使用的列表对象,所以没有任何更新。

P.S 调用 notifyItemInserted(用于动画)或 notifyDataSetChanged(数据的批量更改,无动画),不能同时调用

关于android - RecyclerView - 正确实现 SnackBar UNDO 删除 (Kotlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com