从RecyclerView中移除一个对象

3
使用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());
        }
    });
}

1
你需要从列表中移除,然后通过notifydatasetchanged通知适配器。 - D.J
delete.deleteInBackground();会删除数据。这是否与从适配器中删除相同?还是有另一个命令?我找不到它。 - Martin Erlic
2个回答

1
如果您正在使用RecyclerView,则只需从列表中删除该项并调用方法notifiyDataSetChanged即可。

好的,看起来我已经用 delete.deleteInBackground(); 做到了这一点。谢谢。 - Martin Erlic
这正是原帖第一条评论所说的。 - A. Badakhshan
我现在不在能够部署我的代码的电脑旁,所以只好问一下。我只是想知道是否还有其他事情需要做,但我猜应该没有了。谢谢。 - Martin Erlic
你可以给你的适配器添加一个删除行的方法。如果需要帮助,请告诉我。 - A. Badakhshan
无论如何,你有一些列表需要显示,不管是从服务器还是数据库获取的数据,在将数据设置到适配器之后,只需从列表中移除该项并通知即可。 - Raja Jawahar
显示剩余2条评论

1

最好的方法是从RecyclerView.Adapter使用的数据结构(List)中简单地删除该项,然后调用其notifyItemRemoved()

之前建议使用的notifyDataSetChanged()会不必要地使列表中每个项目无效,而不仅仅是在删除项目后的项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接