簡體   English   中英

如何從 firebase 列表中刪除項目

[英]How to remove item from firebase list

我使用 firebase 數據庫和回收站視圖。 我使用 push () 將項目列表添加到 firebase; 命令。 使用 push() 時; , firebase 為每個添加的項目創建一個唯一的 id。

現在,我想在單擊刪除按鈕時刪除項目,但是當我嘗試 removeValue(); function 到我的數據庫參考,它刪除所有存儲庫而不僅僅是項目。

這就是我現在所擁有的:

從 firebase 讀取數據的片段

users.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
                notes.clear();
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    note = dataSnapshot1.getValue(Note.class);
                    notes.add(note);
                }
                adapter = new NotesAdapter(notes, getActivity());
                RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
                RVNotesList.setLayoutManager(layoutManager);
                RVNotesList.setAdapter(adapter);
                adapter.setOnNoteClickListener(new NotesAdapter.OnNoteClickListener() {
                    @Override
                    public void onNoteClick(final int position) {
                       users.addListenerForSingleValueEvent(new ValueEventListener() {
                           @Override
                           public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                               //TODO delete pressed item.
                           }

                           @Override
                           public void onCancelled(@NonNull DatabaseError databaseError) {

                           }
                       });
                    }
                });
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

我的 onClick 按鈕

@Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.saveNoteBTN:
                String title = ETnoteTitle.getText().toString().trim();
                String desc = ETnoteDesc.getText().toString().trim();
                String date = ETnoteLastDate.getText().toString().trim();
                if (title.isEmpty() || desc.isEmpty() || date.isEmpty()) {
                    return;
                }
                note = new Note(title, desc, date);
                users.push().setValue(note).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d("NoteAdded", "true");
                        getFragmentManager().beginTransaction().
                                remove(getFragmentManager().findFragmentById(R.id.bottom_container)).commit();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d("NoteAdded", "false");
                    }
                });
                break;
            case R.id.deleteNoteBTN:
                getFragmentManager().beginTransaction().
                        remove(getFragmentManager().findFragmentById(R.id.bottom_container)).commit();
                break;
        }
    }

適配器 package com.enjoyapp.eventmanagement.Adapters;

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;

import com.enjoyapp.eventmanagement.Models.Note;
import com.enjoyapp.eventmanagement.R;

import java.util.ArrayList;

public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.NotesViewHolder> {

    private ArrayList<Note> notes;
    private Context context;
    private OnNoteClickListener onNoteClickListener;

    public NotesAdapter(ArrayList<Note> notes, Context context) {
        this.notes = notes;
        this.context = context;
    }

    public interface OnNoteClickListener {
        void onNoteClick(int position);
    }

    public void setOnNoteClickListener(OnNoteClickListener onNoteClickListener) {
        this.onNoteClickListener = onNoteClickListener;
    }

    @NonNull
    @Override
    public NotesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_list_item, parent, false);
        return new NotesAdapter.NotesViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final NotesViewHolder holder, final int position) {
        final Note note = notes.get(position);
        holder.mNoteTitle.setText(notes.get(position).getmTitle());
        holder.mNoteDesc.setText(notes.get(position).getmDescription());
        String lastDayToConfirmNote = (notes.get(position).getmDay() + "/"
                + notes.get(position).getmMonth() + "/" + notes.get(position).getmYear());
        holder.mLastDay.setText(lastDayToConfirmNote);
    @Override
    public int getItemCount() {
        return notes.size();
    }

    public class NotesViewHolder extends RecyclerView.ViewHolder {

        private TextView mNoteTitle;
        private TextView mNoteDesc;
        private TextView mLastDay;
        private CardView note_card;


        public NotesViewHolder(@NonNull View itemView) {
            super(itemView);
            mNoteTitle = itemView.findViewById(R.id.note_title);
            mNoteDesc = itemView.findViewById(R.id.note_description);
            mLastDay = itemView.findViewById(R.id.note_last_date);
            note_card = itemView.findViewById(R.id.note_card);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onNoteClickListener!=null){
                        onNoteClickListener.onNoteClick(getAdapterPosition());
                    }
                }
            });
        }
    }

    public void removeItem(ArrayList arrayList, int position) {
        arrayList.remove(arrayList.get(position));
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, arrayList.size());
    }
}

根據您的代碼,用戶似乎是您的父根,您想刪除其中一個用戶的孩子。 為此,您將需要該孩子的 id。 您可以獲取 id 並將其保存在 ArrayList 中,例如

ArrayList<String> ids = new ArrayList
users.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
            notes.clear();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                note = dataSnapshot1.getValue(Note.class);
                notes.add(note);

                ids.add(dataSnapshot1.getKey());//saving id of each child
            }
            adapter = new NotesAdapter(notes, getActivity());
            RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
            RVNotesList.setLayoutManager(layoutManager);
            RVNotesList.setAdapter(adapter);
            adapter.setOnNoteClickListener(new NotesAdapter.OnNoteClickListener() {
                @Override
                public void onNoteClick(final int position) {
                   users.child(ids.get(position)).removeValue();
                }
            });
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

注意:當您更新筆記 arraylist 時,您必須更新 ids arraylist。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM