Android - 添加UNDO SnackBar以轻扫以删除

时间:2017-11-16 12:02:56

标签: android kotlin android-snackbar

我已成功实施了轻扫以删除我的recyclerView中的操作。

我给recyclelerView充气的列表是本地存储的,不在任何数据库中。

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

这是我的代码:

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根本没有显示,但该元素保存在临时变量中并从列表中删除。

我做错了什么?

P.S。我已经在SO上查看了其他答案,但他们建议使用Dialog。我真的需要使用Snackbar

1 个答案:

答案 0 :(得分:1)

setAction 之后,您忘记调用.show(),因此您的代码将如下所示:

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

例如,我已经使用此方案实现了您的目标。   在主要活动中

 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();
            }
        });
  

侦听器使用的内部类:

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