Android - 添加 UNDO SnackBar 滑动删除

标签 android kotlin android-snackbar

我已经在我的 recyclerView 中成功实现了滑动删除操作。

我用来填充 recyclerView 的列表是本地存储的,不在任何数据库中。

我试图做的是将元素保存到一个临时变量中,如果用户按下撤消按钮,我会恢复它。

这是我的代码:

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] //temporary variable
                        activeSubs.removeAt(position)
                        adapter!!.removeItem(position)

                        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!!.notifyDataSetChanged()
                                })
                    }
                }

我的问题是 SnackBar 根本没有显示,但该元素保存在临时变量中并从列表中删除。

我做错了什么?

附言我已经在 SO 上查看了其他答案,但他们建议使用对话框。不过我真的需要使用 Snackbar

最佳答案

setAction 之后你忘记调用 .show() 所以你的代码将是这样的:

 Snackbar.make(layout, "Subscription Deleted", Snackbar.LENGTH_LONG)
                                .setAction("Undo", { _ ->
                                    activeSubs.add(position-1, tmp)
                                    adapter!!.notifyDataSetChanged()
                                })
.show()

For example, I have achieved your goal using this scenario. In Main Activity

 tvTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tempValue = etUsername.getText().toString();
                etUsername.setText("");
                Snackbar.make(view, "Subscription Deleted", Snackbar.LENGTH_LONG)
                        .setAction("Undo", new editTextListener())
                .show();
            }
        });

Used inner class for listener:

private class editTextListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            etUsername.setText(tempValue);
        }
    }

关于Android - 添加 UNDO SnackBar 滑动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329196/

相关文章:

android - 如何在 Android 登录/注销中管理 session ?

kotlin - 如何使用 toString 扩展数据类

android - 全屏表面 View 隐藏 snackbar

java - Android 应用程序在终止一项 Activity 并启动另一项 Activity 时崩溃

android - android中动态添加textView到gridView

java - 如何以编程方式从 Android 获取自定义 ROM/Android 操作系统名称

android - AndroidX 中的 Snackbar 包

android - 主题应用程序中的样式 SnackBar

java - 不幸的是,应用程序已阻止大脑游戏应用程序中的错误

spring-boot - 为什么我的Spring Boot应用程序不在 mustache 模板中呈现messages.properties