Java 从RecyclerView中删除对象

Java 从RecyclerView中删除对象,java,android,android-recyclerview,Java,Android,Android Recyclerview,在使用ListView时,我可以通过编写this.adapter.delete(mYeets.get(position))轻松地从适配器中删除项目。有了RecyclerView,是否有一个等价物?或者我现在要做的就是通知适配器更改吗 private void deleteComment(int position) { String currentUserObjectId = ParseUser.getCurrentUser().getObjectId(); ParseQuery&

在使用ListView时,我可以通过编写
this.adapter.delete(mYeets.get(position))
轻松地从适配器中删除项目。有了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());
        }
    });
}
private void deleteComment(int位置){
字符串currentUserObjectId=ParseUser.getCurrentUser().getObjectId();
ParseQuery查询=新的ParseQuery(“Yeet”);
query.whereEqualTo(ParseConstants.KEY_OBJECT_ID,mYeets.get(position.getObjectId());
query.whereContains(ParseConstants.KEY\u SENDER\u ID,currentUserObjectId);
query.findInBackground((yeet,e)->{
如果(e==null){
for(ParseObject YetObject:yeet){
if(YetObject.getParseObject(ParseConstants.KEY\u SENDER\u AUTHOR\u POINTER).getObjectId()等于((ParseUser.getCurrentUser().getObjectId())){
AlertDialog.Builder dialogBuilder=新建AlertDialog.Builder(mContext);
dialogBuilder.setTitle(“删除”);
setMessage(“是否要删除此Yeet?”);
dialogBuilder.setPositiveButton(“是”,对话框,其中)->{
//迭代所有消息并删除它们
for(ParseObject删除:yeet){
delete.deleteInBackground();
//this.adapter.delete(mYeets.get(position));
this.adapter.notifyDataSetChanged();
Toast.makeText(mContext,“Yeet deleted”,Toast.LENGTH_SHORT.show();
}
});
dialogBuilder.setNegativeButton(“否”,(对话框,其中)->{
});
AlertDialog AlertDialog=dialogBuilder.create();
alertDialog.show();
}
}
}否则{
Log.e(“Error”,e.getMessage());
}
});
}

如果您使用的是RecyclerView,只需从列表中删除该项并调用notifiyDataSetChanged方法即可

从RecyclerView.Adapter使用的数据结构(列表)中删除该项,然后调用它应该是最好的方法


先前建议的方法会不必要地使列表中的每一项无效,而不是仅使位于已删除项之后的项无效。

您必须从列表中删除,然后将notifydatasetchanged更改为适配器。
delete.deleteInBackground()将删除数据。这与将其从适配器中卸下相同吗?还是有其他命令?我找不到它。好吧,看来我已经在用
delete.deleteInBackground()做这件事了。谢谢。这正是原始帖子的第一条评论所说的。我不在一台可以部署代码的计算机上,所以我不得不问。我只是想知道我是否还有别的事要做,但我想没有。谢谢。您可以向适配器添加删除行的方法。如果你想让我帮你,请告诉我。我很困惑。删除数据库中的对象并通知适配器数据更改是否不够?