提问者:小点点

使用addSnapshotListener时,如何查看FiREORS的实时变化?


我有一个产品集合,我想获得实时更新。这是我的代码:

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();

同样的事情发生了。仍然看到旧的价格。


共1个答案

匿名用户

您还没有将更新的产品数据放入您的列表

case MODIFIED:
    Product product = documentChange.getDocument().toObject(Product.class);
    // TODO: Replace the existing product in the list with the updated one
    adapter.notifyDataSetChanged();