【问题标题】:Android : How to update listview item?Android:如何更新列表视图项?
【发布时间】:2017-06-23 21:55:48
【问题描述】:

我有一个ListView,其中包含一个产品列表。每个列表项都包含一个TextView,如果产品在购物车中,它会显示购物车中的数量

购物车是一个弹出窗口,可以从购物车中更改产品数量。

问题是当我关闭购物车弹出窗口时,列表项视图中的数量没有更新,因为没有调用 getView

我知道PopupWindow.OnDismissListener,但不知道如何显式更新视图或强行调用getView

有什么方法可以实现吗?谢谢。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    所以从您的问题来看,我猜您在适配器中传递了 ArrayListProduct。所以让我们假设Product 类看起来像这样。

    class Product {
        public String productName; 
        public int quantity;
    }
    

    现在当您从购物车更新数量时,您需要更新您已传递给适配器的ArrayList,然后在适配器上调用notifyDataSetChanged() 以查看列表中的更改。

    所以我正在编写一些伪代码来更改购物车中的数量。

    public void changeQuantity(int index, boolean quantityIncreased) {
        if(quantityIncreased) products.get(index).quantity = products.get(index).quantity + 1;
        else  products.get(index).quantity = products.get(index).quantity - 1;
    }
    

    现在像这样覆盖您的PopupWindow.OnDismissListener。拨打notifyDataSetChanged查看列表中的效果。

    @Override
    public void onDismissListener() {
        adapter.notifyDataSetChanged();
    }
    

    【讨论】:

    • 我考虑调用notifyDataSetChanged,但它会刷新整个布局。只需看一下弹出窗口,用户正在查看的项目就会消失,回到他开始的地方。这就是问题所在。
    • 我不太明白你的意思。用户正在查看的项目将消失 - 你是什么意思?是的,不保存列表中采取的中间操作?
    • 我的意思是列表将被重置,并且必须再次向下查看。
    • 不,不应该。如果是这样,您始终可以将滚动位置设置为列表中最后保存的滚动位置。在这种情况下,请在调用 notifyDataSetChanged() 之前保存当前位置。
    • 有道理,getFirstVisiblePosition() 会做到的。我会试试的。谢谢!
    【解决方案2】:

    如果您通过 BaseAdapter 构造函数传递 PRODUCT 对象列表, 您可以获取getChildAt(position)点击购物车的商品的位置。 如果购物车数量发生变化,根据上述位置,您也可以在ArrayList 中跟踪该项目。 因此,在 arraylist 中传递特定产品的新值并调用notifyDataSetChanged()。这将更新您的列表视图

    如果可能的话,我建议将ListView更新为使用RecyclerView,它比ListView更灵活。

    【讨论】:

    • 购物车包含所有物品,并且购物车在另一个按钮点击时弹出,而不是任何产品。我正在考虑重置数据并调用notifyDataSetChanged,这是我想避免的。
    • 好的,但是recycler view 会有什么帮助呢?
    • ListView 已弃用,取而代之的是 RecyclerView。两者的方法在某种程度上相似。 recyclerview适配器具有notifyItemChanged(position)等功能,它将检查特定项目而不是整个项目
    • 我会试试的,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多