我已成功实施了滑动以从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
中重新添加。我做错了什么?
答案 0 :(得分:1)
您有一个适配器方法删除项目
adapter!!.removeItem(position)
即从适配器列表中删除该项目并通知回收站视图。
然而,undo方法不使用@Submerged指出的适配器列表,尝试创建等效方法
adapter!!.addItem(position)
目前您正在将项目添加到其他列表对象,而不是适配器使用的项目,因此不会更新任何内容。
P.S调用notifyItemInserted(用于动画)或notifyDataSetChanged(批量更改数据,无动画),而不是两者