【问题标题】:How to delete an item in RecyclerView and delete the data in Firebase aswell如何删除 RecyclerView 中的项目并删除 Firebase 中的数据
【发布时间】:2021-01-31 12:48:49
【问题描述】:

我想在我的 RecyclerView 中删除一个项目,当我单击删除按钮时,它也会删除其他项目。

这是我的火力基地结构

DB structure

我想删除我的 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) {
    
                            }
                        });
                    }
                });

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

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

    所以,代码应该是这样的

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

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

    AddValueEventListener 和 OnDataChange() 函数请参考document

    【讨论】:

      猜你喜欢
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多