0

I have a RecyclerView with some tasks. Task has some TextViews and Buttons. I have a delete button and when I press it I show a dialog to confirm deleting. If user press "Delete" i delete task and show a Snackbar with UNDO button. But when i try to show my Snackbar in onBindViewHolder it says "cannot resolve symbol 'show'. Can't get what's wrong. Please help.

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

        }
    }

1 Answers1

0

Try to use

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

Or

And you call show method outside onClick method ,you can move it in the onClick method .And try again .

KeLiuyue
  • 8,149
  • 4
  • 25
  • 42