Удаление данных из Firebase в RecyclerAdapter - PullRequest
0 голосов
/ 30 апреля 2018

Я удаляю элемент списка с помощью PopupMenu в моем RecyclerViewAdapter, но когда элемент удаляется, он остается в базе данных Firebase.

Это на onBindViewHolder на RecyclerAdapter

holder.opcionesButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //creating a popup menu
            PopupMenu popup = new PopupMenu(context, holder.opcionesButton);
            //inflating menu from xml resource
            popup.inflate(R.menu.menu_edit);
            //adding click listener
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.edit_item:
                            //handle menu1 click
                            break;
                        case R.id.delete_item:

                            tareasList.remove(position);
                            notifyItemRemoved(position);
                            Toast.makeText(context, "Tareas eliminada!", Toast.LENGTH_SHORT).show();
                            break;

                    }
                    return false;
                }
            });
            //displaying the popup
            popup.show();
        }
    });

И это на MainFragment

  final Query tareasQuery = mTareasDatabase.child(userId);
        tareasQuery.addChildEventListener(new ChildEventListener() {

            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Tareas tareas = new Tareas();
                tareas.setFecha(dataSnapshot.getValue(Tareas.class).getFecha());
                tareas.setDescripcion(dataSnapshot.getValue(Tareas.class).getDescripcion());
                tareas.setLista(dataSnapshot.getValue(Tareas.class).getLista());
                tareas.setPrioridad(dataSnapshot.getValue(Tareas.class).getPrioridad());
                mTareasList.add(tareas);
                mTareasAdapter.notifyDataSetChanged();

            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                String tareasId = dataSnapshot.getValue(Tareas.class).getTareasId();
                mTareasDatabase.child(userId).child(tareasId).removeValue();
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                String tareasId = dataSnapshot.getValue(Tareas.class).getTareasId();
                mTareasDatabase.child(userId).child(tareasId).removeValue();

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

Все работает нормально, кроме того, что не удаляет его из базы огня

Решение

Одновременное удаление предмета из пожарной базы и окна рециркуляции

case R.id.delete_item:
                            FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
                            String tareasId = tareas.getTareasId();
                            final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                            String userId = user.getUid();
                            DatabaseReference databaseReference = firebaseDatabase.getReference("Tareas")
                                    .child(userId).child(tareasId);
                            databaseReference.removeValue();

                            tareasList.remove(position);
                            notifyItemRemoved(position);
                            Toast.makeText(context, "Tareas eliminada!", Toast.LENGTH_SHORT).show();
                            break;

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

это потому, что вы удаляете только из локального списка. Вы должны удалить значение из firebase тоже. Для удаления используйте код

firebaseRef.removeValue();

В вашем firebaseRef вы должны указать, какое значение вы хотите удалить.

0 голосов
/ 30 апреля 2018

Хорошо, я решил это. Мне просто нужно было добавить все ссылки на базу данных на элементе удаления и одновременно удалить его из представления переработчика и базы данных

 case R.id.delete_item:
                            FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
                            String tareasId = tareas.getTareasId();
                            final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                            String userId = user.getUid();
                            DatabaseReference databaseReference = firebaseDatabase.getReference("Tareas")
                                    .child(userId).child(tareasId);
                            databaseReference.removeValue();

                            tareasList.remove(position);
                            notifyItemRemoved(position);
                            Toast.makeText(context, "Tareas eliminada!", Toast.LENGTH_SHORT).show();
                            break;
...