У меня есть пользовательский вид списка, который показывает список предметов и количество каждого предмета. Проблема, с которой я сталкиваюсь, заключается в том, что когда я добавляю новый элемент в список, он повторяет элементы, которые уже присутствовали в списке. Тем не менее, когда я обновляю количество любого из элементов в списке, это показывает отлично. Проведя некоторое исследование, я обнаружил, что причина повторения элементов, уже присутствующих в списке, при добавлении нового элемента - у меня .notifyDataSetChanged () в методе onChildAdded (). Но я не хочу повторять эти элементы, когда добавляю новые элементы в список.
Фрагмент кода:
public void displayToList(final String orderID, final String tableID, final String restaurantID) {
final OrderDetailsholder orderDetailsholder = new OrderDetailsholder(OrderDetailsActivity.this, R.layout.order_details_layout, arrayList);
orderDetailsList.setAdapter(orderDetailsholder);
DatabaseReference activeOrders = FirebaseDatabase.getInstance().getReference("activeOrders");
Query ordersQuery = activeOrders.child(restaurantID).child(tableID).child(orderID);
ordersQuery.keepSynced(true);
ordersQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
//arrayList.clear();
String dishName = dataSnapshot.child("productName").getValue(String.class);
int dishQty = dataSnapshot.child("productQuantity").getValue(Integer.class);
activeOrdersObj = new ActiveOrders(dishName, dishQty);
arrayList.add(activeOrdersObj);
orderDetailsholder.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
String dishName = dataSnapshot.child("productName").getValue(String.class);
int dishQty = dataSnapshot.child("productQuantity").getValue(Integer.class);
activeOrdersObj = new ActiveOrders(dishName, dishQty);
arrayList.add(activeOrdersObj);
orderDetailsholder.clear();
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Есть идеи о том, что мне добавить, чтобы решить эту проблему?