2016-09-19 11 views
3

ListViewを使用しているときに、this.adapter.delete(mYeets.get(position))と書くと、簡単にアダプタからアイテムを削除できます。 RecyclerViewでは同等の機能はありますか?それとも、アダプターに今私がしなければならないすべての変更を通知していますか?RecyclerViewからオブジェクトを削除する

private void deleteComment(int position) { 
    String currentUserObjectId = ParseUser.getCurrentUser().getObjectId(); 
    ParseQuery<ParseObject> query = new ParseQuery<>("Yeet"); 
    query.whereEqualTo(ParseConstants.KEY_OBJECT_ID, mYeets.get(position).getObjectId()); 
    query.whereContains(ParseConstants.KEY_SENDER_ID, currentUserObjectId); 
    query.findInBackground((yeet, e) -> { 
     if (e == null) { 

      for (ParseObject yeetObject : yeet) { 

       if (yeetObject.getParseObject(ParseConstants.KEY_SENDER_AUTHOR_POINTER).getObjectId().equals((ParseUser.getCurrentUser().getObjectId()))) { 

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext); 
        dialogBuilder.setTitle("Delete"); 
        dialogBuilder.setMessage("Do you want to delete this Yeet?"); 
        dialogBuilder.setPositiveButton("Yes", (dialog, which) -> { 

         // Iterate over all messages and delete them 
         for (ParseObject delete : yeet) { 

          delete.deleteInBackground(); 

          //this.adapter.delete(mYeets.get(position)); 
          this.adapter.notifyDataSetChanged(); 

          Toast.makeText(mContext, "Yeet deleted", Toast.LENGTH_SHORT).show(); 
         } 

        }); 
        dialogBuilder.setNegativeButton("No", (dialog, which) -> { 
        }); 
        AlertDialog alertDialog = dialogBuilder.create(); 
        alertDialog.show(); 
       } 
      } 

     } else { 
      Log.e("Error", e.getMessage()); 
     } 
    }); 
} 
+1

リストから削除してからnotifydatasettedをアダプターに変更する必要があります。 –

+0

'' delete.deleteInBackground(); ''はデータを削除します。アダプターから取り外すのと同じですか?それとも別のコマンドがありますか?私はそれを見つけることができません。 – santafebound

答えて

1

RecyclerView.Adapterで使用されているデータ構造(List)から項目を削除してから、notifyItemRemoved()を呼び出すのが最善の方法です。

以前に提案されたnotifyDataSetChanged()は、削除されたアイテムの後に位置するアイテムだけでなく、リスト内のすべてのアイテムを不必要に無効にします。

2

RecyclerViewを使用している場合は、リストからアイテムを削除し、notifiyDataSetChangedメソッドを呼び出します。

+0

さて、私はすでに '' delete.deleteInBackground(); ''でこれをやっているようです。ありがとう。 – santafebound

+0

これはまさに元の記事の最初のコメントです。 –

+0

私は自分のコードを配備できるコンピュータではないので、私は尋ねなければならなかった。私は他に何かがあるかどうか疑問に思っていたが、そうは思わなかった。ありがとう。 – santafebound

関連する問題