当我单击删除按钮时,我想删除我的回收站视图中的一个项目,它也会删除其他项目。
这是我的火力点结构
DB结构
我想删除Firebase中的每个项目或推送的键,但如果我单击1个项目,它也会删除其他项目,我的代码中会发生什么。
这是我的代码
List<FetchRheinSubject> fetchDataList = new ArrayList<>();
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolderClass viewHolderClass=(ViewHolderClass)holder;
FetchRheinSubject fetchData = fetchDataList.get(position);
viewHolderClass.subjectName.setText(fetchData.getSubjectName());
viewHolderClass.day.setText(fetchData.getDay());
viewHolderClass.time.setText(fetchData.getTime());
}
@Override
public int getItemCount() {
return fetchDataList.size();
}
public class ViewHolderClass extends RecyclerView.ViewHolder {
TextView subjectName, day, time , subCounter;
ImageView delete;
public ViewHolderClass(@NonNull final View itemView) {
super(itemView);
subjectName=itemView.findViewById(R.id.subjectName);
day=itemView.findViewById(R.id.day);
time=itemView.findViewById(R.id.time);
delete = itemView.findViewById(R.id.deleteIcon);
subCounter = itemView.findViewById(R.id.subCounter);
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().getRoot().child("rhein_subject");
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChildren()) {
DataSnapshot firstChild = dataSnapshot.getChildren().iterator().next();
firstChild.getRef().removeValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
为了删除Firebase实时数据库中的项目,而不是尝试删除addValueEventChangeListener中的项目,请尝试调用RemoveValue();在代码中。
所以,代码应该看起来像
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataReference.getChild(clickedKey).removeValue
}
});
AddValueEventListener中的OnDataChange()仅在Firebase实时数据库更新时调用。在这种情况下,您尝试在实时数据库中进行更改,这在这里是不正确的概念。
有关AddValueEventListener和OnDataChange()函数,请参阅本文档。