【发布时间】:2020-04-04 06:08:54
【问题描述】:
我有一个自定义列表视图,其中显示了项目列表和每个项目的数量。我面临的问题是当我在列表中添加一个新项目时,它会重复列表中已经存在的项目。但是,当我更新列表中任何项目的数量时,它会完美显示。经过一些研究,我发现添加新项目时重复列表中已经存在的项目的原因 - 我在 onChildAdded() 方法中有 .notifyDataSetChanged() 。但是,当我在列表中添加新项目时,我不想重复这些项目。
代码片段:
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) {
}
});
}
知道我应该添加什么来解决这个问题吗?
【问题讨论】:
-
你为什么评论这行? //arrayList.clear();
-
@MohammadMoeinGolchin 当我添加 arrayList.clear() 它没有显示我添加的新项目..
-
@MohammadMoeinGolchin 我发布了工作代码..
标签: android firebase android-studio firebase-realtime-database