2016-09-19 5 views
3

Wenn Sie ListView verwenden, konnte ich problemlos ein Element aus dem Adapter löschen, indem Sie this.adapter.delete(mYeets.get(position)) schreiben. Gibt es mit RecyclerView ein Äquivalent? Oder meldet der Adapter einer Änderung alles, was ich jetzt tun muss?Entfernen eines Objekts aus 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

Sie müssen aus der Liste entfernen und dann notifydatasetchanged zum Adapter. –

+0

'' delete.deleteInBackground(); '' wird die Daten entfernen. Ist das genauso wie das Entfernen vom Adapter? Oder gibt es einen anderen Befehl? Ich kann es nicht finden. – santafebound

Antwort

1

Einfach das Element aus der Datenstruktur (Liste) entfernen, die vom RecyclerView.Adapter verwendet wird, und dann notifyItemRemoved() aufrufen, sollte der beste Weg sein.

Die zuvor vorgeschlagene notifyDataSetChanged() macht unnötigerweise jedes einzelne Element in der Liste ungültig, und nicht nur die nach dem gelöschten Element.

2

Wenn Ihr RecyclerView verwenden, löschen Sie einfach den Eintrag aus der Liste und rufen Sie die Methode notifiyDataSetChanged;

+0

Okay, so scheint es, dass ich das schon mit '' delete.deleteInBackground(); '' mache. Vielen Dank. – santafebound

+0

Dies ist genau, was der erste Kommentar des ursprünglichen Beitrags sagt. –

+0

Ich bin nicht an einem Computer, wo ich meinen Code bereitstellen kann, also musste ich fragen. Ich habe mich nur gefragt, ob ich noch etwas anderes tun muss, aber ich denke nicht. Vielen Dank. – santafebound

Verwandte Themen