【问题标题】:can't show a snackbar无法显示小吃店
【发布时间】:2018-05-04 08:30:56
【问题描述】:

我有一个包含一些任务的 RecyclerView。任务有一些 TextViews 和 Buttons。我有一个删除按钮,当我按下它时,我会显示一个对话框以确认删除。如果用户按“删除”,我会删除任务并显示带有 UNDO 按钮的 Snackbar。但是当我尝试在 onBindViewHolder 中显示我的 Snackbar 时,它会显示“无法解析符号‘显示’。不知道出了什么问题。请帮忙。

@Override
    public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
        Item item = items.get(viewHolder.getAdapterPosition());
        if (item.isTask()) {
            final Task task = (Task)item;
            TaskViewHolder taskViewHolder = (TaskViewHolder)viewHolder;
            viewBinderHelper.bind((SwipeRevealLayout)taskViewHolder.view, task.getId());

            taskViewHolder.title.setText(task.getTitle());
            taskViewHolder.time.setText(Utils.getTime(task.getDate()));

            taskViewHolder.delete_button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setTitle("Delete this task?");
                    builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            int pos = viewHolder.getAdapterPosition();
                            String key = Utils.getDate(task.getDate());

                            removeItem(pos);
                            used_dates.put(key, used_dates.get(key) - 1);

                            if (!getItem(pos - 1).isTask() && used_dates.get(key) == 0) {
                                removeItem(pos - 1);
                                used_dates.put(key, null);
                            }
                        }

                        Snackbar snackbar = Snackbar
                                .make(layout, "Task is deleted", Snackbar.LENGTH_SHORT)
                                .setAction("UNDO", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        currentTaskFragment.addTask(task);
                                    }
                                });
                        snackbar.show(); //Cannot resolve symbol 'show'




                    });
                    builder.setNegativeButton("Cansel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            viewBinderHelper.closeLayout(task.getId());
                            dialog.cancel();
                        }
                    });

                    AlertDialog dialog = builder.create();
                    dialog.show();
                }

            });

        }
        else {

            Separator separator = (Separator)item;
            SeparatorViewHolder separatorViewHolder = (SeparatorViewHolder)viewHolder;
            separatorViewHolder.date.setText(Utils.getDate(separator.getDate()));

        }
    }

【问题讨论】:

  • 您过早地关闭了onClick() 方法。将} 正上方的Snackbar snackbar = ... 移动到snackbar.show(); 之后。
  • @MikeM。天哪,这么愚蠢的错误...谢谢!

标签: android snackbar


【解决方案1】:

尝试使用

import android.support.design.widget.Snackbar;

Snackbar
        .make(layout, "Task is deleted", Snackbar.LENGTH_SHORT)
        .setAction("UNDO", new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                    currentTaskFragment.addTask(task);
            }
        }).show();

或者

而你在onClick方法之外调用show方法,你可以在onClick方法中移动它。再试一次。

【讨论】:

  • 您答案的原始部分无效。 show() 方法不返回任何内容。
  • 是的。我知道了。我在我的 as 中测试了代码。然后我改变了它。
猜你喜欢
  • 2016-04-01
  • 2021-07-10
  • 2020-05-18
  • 2016-03-13
  • 2020-05-22
  • 2020-04-07
  • 2022-10-08
  • 2022-12-17
  • 2019-02-17
相关资源
最近更新 更多