【问题标题】:Recyclerview Delete item error with Firebase databaseRecyclerview 使用 Firebase 数据库删除项目错误
【发布时间】:2020-12-01 06:58:54
【问题描述】:

我的应用中有一个 recyclerview,它显示了用户在 firebase 数据库中保存的笔记。在长按笔记时,用户可以选择是否删除笔记。 recyclerview 中列出的每条笔记都会从数据库中删除,并从 recyclerview 中删除,除了最后一条。最后一个会从数据库中删除,但不会从列表中清除。一旦我们回到 mainactivity,然后再次打开 savednotes 活动,列表就会被清除。

这是我长按按钮的代码:

holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
            alertDialog.setCancelable(true)
                    .setTitle("Do you really want to delete this note?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            String name = model.getNoteName();
                            String userId = auth.getUid();
                            DatabaseReference reference = FirebaseDatabase.getInstance()
                                    .getReference();
                            Query delete = reference.child("UserData").child(userId)
                                    .orderByChild("Note Name").equalTo(name);
                            delete.addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot snapshot) {
                                    for (DataSnapshot deleteSnapshot : snapshot.getChildren()) {
                                        deleteSnapshot.getRef().removeValue();
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError error) {

                                }
                            });



                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    })
                    .show();

            return true;
        }
    });

我不知道这里有什么遗漏或错误。任何帮助将不胜感激:)

【问题讨论】:

    标签: android firebase firebase-realtime-database android-recyclerview


    【解决方案1】:

    点击移除项目时,更新适配器:

    adapter.notifyItemRemoved(which);
    

    来自文档:

    notifyItemRemoved

    public final void notifyItemRemoved (int position)

    通知任何已注册的观察者该项目 previ 位于位置的 ously 已从数据集中删除。现在可以在 oldPosition - 1 找到之前位于 position 和之后的项目。

    这是一个结构性变化事件。数据集中其他现有项目的表示仍被认为是最新的,不会反弹,尽管它们的位置可能会改变。

    【讨论】:

    • 嗯,这有点帮助。正如我所说的,问题只存在于列表中的最后一项,我不得不将位置 0 硬编码为“list.remove(0)”和“notifyItemRemoved(0)”。然后它完美地工作了。
    • 不是public void onClick(DialogInterface dialog, int which) {这里给你的位置?
    • 在每个位置都返回“-1”
    猜你喜欢
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多