Чтобы удалить узел из базы данных Firebase Realtime, вам нужна ссылка на его точный, полный путь.У вас есть такие ссылки при загрузке данных.Например, в onDataChange
вы можете удалить каждый узел с помощью:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
//Booking b = dataSnapshot1.getValue(Booking.class);
dataSnapshot1.getRef().removeValue();
}
}
Конечно, это не то, что вы хотите сделать, но это показывает, какудаление из Firebase работает.Вам нужно знать полный путь узла, который вы пытаетесь удалить, включая ключ этого дочернего узла.
В вашем слушателе вы получаете значение от каждого дочернего узла идобавьте это в список, который вы затем отобразите в адаптере.Но вы не получаете ключ каждого дочернего узла.Это означает, что в вашем списке / адаптере есть только часть знаний, необходимых для удаления узлов.К тому моменту, когда ваша функция deleteItem
будет вызвана с позицией удаляемого элемента, уже невозможно найти ключ этого узла.
Так что вам нужно сохранитьотслеживать как ключи, так и значения дочерних узлов вашего адаптера.Обычный способ сделать это - сохранить два списка: один с ключами, а другой со значениями.
Итак, сначала вы добавляете List<String>
для ключей к вашему адаптеру:
ArrayList<Booking> bookings;
ArrayList<String> keys;
И примите это в конструкторе адаптера:
public MyAdapterBookings(Context c , ArrayList<Booking> b, ArrayList<String> k)
{
context = c;
bookings = b;
keys = k;
}
Затем вы добавляете каждый ключ в onDataChange
:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.d(TAG, "populating recyclerview");
list = new ArrayList<Booking>();
List<String> keys = new ArrayList<String>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
Booking b = dataSnapshot1.getValue(Booking.class);
list.add(b);
keys.add(dataSnapshot1.getKey());
}
adapter = new MyAdapterBookings(CustomerProfile.this, list, keys);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
И, наконец, вы можете найти ключ дляудаляемый элемент:
public void deleteItem(int position){
String key = keys.get(position);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Booking");
ref.child(key).removeValue();
}