我有一个产品集合,我想获得实时更新。这是我的代码:
query.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot querySnapshot, @Nullable FirebaseFirestoreException e) {
if (e != null) return;
List<Product> list = new ArrayList<>();
for (DocumentChange documentChange : querySnapshot.getDocumentChanges()) {
switch (documentChange.getType()) {
case ADDED:
Product product = documentChange.getDocument().toObject(Product.class);
list.add(product);
break;
case MODIFIED:
adapter.notifyDataSetChanged();
break;
case REMOVED:
//
break;
}
}
adapter = new ProductAdapter(context, list);
recyclerView.setAdapter(adapter);
}
});
如果一个产品的价格发生了变化,并且我的应用程序在前台,我根本看不到我的RecyclerView
中的变化。即使我通知适配器,我仍然可以看到旧的价格。还有一些奇怪的事情发生了。如果第十个产品的价格发生了变化,滚动会转到第一个位置。
当价格发生变化时,如何查看实时变化?当发生变化时,如何保持在RecyclerView
中的当前位置?
编辑:
case MODIFIED:
Product modifiedProduct = documentChange.getDocument().toObject(Product.class);
for(Product p : list) {
if(p.getProductName().equals(modifiedProduct.getProductName())) {
list.remove(p);
}
}
list.add(modifiedProduct);
adapter.notifyDataSetChanged();
同样的事情发生了。仍然看到旧的价格。
您还没有将更新的产品数据放入您的列表
。
case MODIFIED:
Product product = documentChange.getDocument().toObject(Product.class);
// TODO: Replace the existing product in the list with the updated one
adapter.notifyDataSetChanged();