提问者:小点点

如何在RecyclerView中删除项目并在Firebase中删除数据


当我单击删除按钮时,我想删除我的回收站视图中的一个项目,它也会删除其他项目。

这是我的火力点结构

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) {
    
                            }
                        });
                    }
                });

共1个答案

匿名用户

为了删除Firebase实时数据库中的项目,而不是尝试删除addValueEventChangeListener中的项目,请尝试调用RemoveValue();在代码中。

所以,代码应该看起来像

delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dataReference.getChild(clickedKey).removeValue
                }
            });

AddValueEventListener中的OnDataChange()仅在Firebase实时数据库更新时调用。在这种情况下,您尝试在实时数据库中进行更改,这在这里是不正确的概念。

有关AddValueEventListener和OnDataChange()函数,请参阅本文档。