【发布时间】:2017-11-17 19:23:30
【问题描述】:
我已经成功实现了从 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。我做错了什么?
【问题讨论】:
-
看起来您的适配器的底层数据结构与您将项目添加回的数据结构是分开的。 (这是一个假设,需要在 2 个地方调用 removeAt 和 removeItem)
-
@submersed 是的,你是对的,我在适配器中保留一个列表,在 main_activity 中保留另一个列表。它们是一样的,但我都需要它们
-
@Submersed 我回答了,但不知何故标签不起作用
标签: android android-recyclerview kotlin