2017-11-21 34 views
0

私はRecyclerViewをいくつかのタスクで持っています。タスクにはいくつかのTextViewとButtonがあります。削除ボタンがあり、それを押すと、削除を確認するダイアログが表示されます。ユーザーが「削除」を押すと、タスクが削除され、「取り消しボタン」のスナックバーが表示されます。それは「シンボル 『ショー』を解決できないと言うonBindViewHolderで。間違っているものを手に入れることができません。助けてください。はスナックバーを表示できません

@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

あなたは 'のonClick()'メートルを閉じましたエソードは早すぎる。 'Snackbar snackbar = ...'行のすぐ上の '}'を 'snackbar.show();'の後に移動してください。 @MikeM。 –

+1

ああ、そんなに愚かな間違い...ありがとう! –

答えて

0

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方法でそれを動かす.ANDもう一度試すことができ、onClick方法外showメソッドを呼び出します。

+0

答えの元の部分が無効です。 'show()'メソッドは何も返しません。 –

+0

はい。わかりました。私のコードを自分のものとしてテストします。私はそれを変更します。 – KeLiuyue