【问题标题】:Android - Add UNDO SnackBar to Swipe to deleteAndroid - 将 UNDO SnackBar 添加到滑动删除
【发布时间】:2018-04-29 23:08:27
【问题描述】:

我已经在我的 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

【问题讨论】:

    标签: android kotlin android-snackbar


    【解决方案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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2023-01-24
      相关资源
      最近更新 更多