【问题标题】:Delete button on RecyclerView deletes the wrong itemRecyclerView 上的删除按钮删除了错误的项目
【发布时间】:2021-04-11 06:08:47
【问题描述】:

我正在为我的RecyclerView 使用 Firestore 适配器,但我在使用“删除”按钮时遇到了问题。当我按下它时,它会删除错误的项目而不是我想要的项目。

这是onBindViewHolder 中我的按钮的代码:

protected void onBindViewHolder(@NonNull AdminRewardAdapter.RewardViewHolder holder, int position, @NonNull RewardModel model) {

    fStore = FirebaseFirestore.getInstance();

    holder.rank.setText(String.valueOf(position + 1));
    Double dq = model.getDonationReq();
    holder.donationRequired.setText(String.format("%.0f", dq));
    holder.rewardDescription.setText(model.getRewardDesc());

    holder.delete_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            CollectionReference collectionReference = fStore.collection("Rewards");

            AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
            builder.setTitle("Delete");
            builder.setMessage("Are you sure to delete " + (position + 1) + " reward?");
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Query query = collectionReference.whereEqualTo("donationReq", (position + 1));
                    query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if(task.isSuccessful()){
                                for(DocumentSnapshot document : task.getResult()){
                                    document.getReference().delete();
                                }
                            }
                        }
                    });
                }
            });
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            });
            builder.create().show();
        }
    });

}

如果有帮助,这是我的 Firebase:

【问题讨论】:

  • 表示document.getReference()返回对另一个文档的引用。您应该使用文档 ID 而不是职位。
  • 哦,在这种情况下文档 ID 是自动生成的..
  • 存储在一个变量中,稍后使用它来删除文档。
  • 您使用位置参数。但是这个参数的值并不是你所期望的。通过在 onClick 中记录或烘烤来检查。
  • 天哪,成功了!我明白你的意思是使用变量。这对我有用:Query query = collectionReference.whereEqualTo("rewardDesc", model.getRewardDesc());

标签: android firebase android-recyclerview google-cloud-firestore


【解决方案1】:

您发送的数据有误。

Query query = collectionReference.whereEqualTo("donationReq", (position + 1));

你写的是position而不是position + 1

【讨论】:

    【解决方案2】:

    要从数据库中删除特定文档,您需要知道其 ID。这意味着当用户单击要删除的项目时,您需要能够查找该项目的文档 ID。因此,您需要在创建视图时同时获取文档中的值及其 ID。

    因此,除了 RewardModel 对象之外,您还需要将相应的文档 ID 保存在某处。

    如果您使用 FirebaseUI 显示列表,您可以通过以下方式获取给定位置的 ID:Is there a way to get document ID of item from FirestoreRecyclerAdapter?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多