【发布时间】: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