【问题标题】:RecyclerView - Correctly implement SnackBar UNDO deletion (Kotlin)RecyclerView - 正确实现 SnackBar UNDO 删除(Kotlin)
【发布时间】: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


【解决方案1】:

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

adapter!!.removeItem(position)

即从适配器列表中删除该项目并通知回收者视图。

但是,undo 方法不使用@Submerged 指出的适配器列表,请尝试创建等效方法

adapter!!.addItem(position)

由于当前您将项目添加到不同的列表对象,而不是适配器使用的对象,因此没有更新。

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

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2020-12-05
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多