2016-09-19 54 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

您必須從列表中刪除,然後將notifydataset更改爲適配器。 –

+0

''delete.deleteInBackground();''將刪除數據。這與將其從適配器中移除相同嗎?還是有另一個命令?我無法找到它。 – santafebound

回答

1

簡單地從RecyclerView.Adapter使用的數據結構(List)中刪除項目,然後調用它的notifyItemRemoved()應該是最好的方法。

先前建議的notifyDataSetChanged()不必要地使列表中的每個項目無效,而不是僅使位於已刪除項目之後的項目失效。

2

如果您正在使用RecyclerView,只需從列表中刪除的項目,並調用方法notifiyDataSetChanged;

+0

好吧,看來我已經用''delete.deleteInBackground();''來做這件事了。謝謝。 – santafebound

+0

這正是原始帖子的第一條評論所說的。 –

+0

我不在一臺可以部署我的代碼的計算機上,所以我不得不問。我只是想知道是否還有其他事情我必須做,但我猜不是。謝謝。 – santafebound