2017-11-21 5 views
0

Ich habe einen RecyclerView mit einigen Aufgaben. Aufgabe hat einige TextViews und Buttons. Ich habe eine Löschtaste und wenn ich sie drücke, zeige ich einen Dialog, um das Löschen zu bestätigen. Wenn der Benutzer "Löschen" drückt, lösche ich die Aufgabe und zeige eine Snackbar mit UNDO-Taste. Aber wenn ich versuche, meine Snackbar in onBindViewHolder zu zeigen, heißt es „kann Symbol nicht auflösen 'Show'. Kann nicht bekommen, was falsch ist. Bitte helfen.kann keine Snackbar zeigen

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

     } 
    } 
+0

Sie geschlossen haben die 'onClick()' m Ethod zu früh. Bewege das '}' direkt über der 'Snackbar snackbar = ...' Zeile nach 'snackbar.show();'. –

+1

@MikeM. omg so blöder Fehler ... Danke! –

Antwort

0

Try

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

zu verwenden oder

Und Sie rufen show Methode außerhalb onClick Methode, können Sie es in der onClick Methode bewegen .Und erneut versuchen.

+0

Der ursprüngliche Teil Ihrer Antwort ist ungültig. Die 'show()' Methode gibt nichts zurück. –

+0

Ja. Ich habe es. Und ich teste den Code in meinem. Und ich ändere es. – KeLiuyue