How to delete an item in RecyclerView and delete the data in Firebase aswell

Viewed 38

I want to delete an item in my RecyclerView when I click the delete button it also deletes other items.

Here is my firebase structure

DB structure

I want to delete each item or the pushed key in my firebase but what happens in my code if I click a 1 item it deletes others also.

here is my code

     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 Answers

In order to remove an item in Firebase Realtime Database, instead of trying to remove an item in addValueEventChangeListener, try to call removeValue(); in the code.

So, the code should look like

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

OnDataChange() in AddValueEventListener will only be called when Firebase Realtime Database gets updated. In this case, you are trying to make changes in the Realtime Database which is not correct concept here.

Please refer to this document for AddValueEventListener and OnDataChange() function.

Related