Expandablelistview的数据重复问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wu_zi/article/details/51643718

最近在做一个购物车的过程中使用到了ExpandableListview,购物车要求的效果如下图:


其实看到这个设计图最先想到的是用ListView嵌套去解决的,于是我就用ListView嵌套去做了一个版本。但是结果不让人很满意,因为每一个Item里面的内容太多了,所以导致滑动的时候出现比较明显的卡顿。


后来我就想到使用ExpandableListView去实现这个效果,只要把ExpandableListView的Group的点击事件去掉,然后把所有的组展开就能达到相应的效果。很快我使用ExpandableListView达到了相应的效果,购物车能够正常的显示出来了。但是产品要求的还需要对购物车进行增删查改、选中的一些操作。


在进行了删除操作之后我发现ExpandableListView当中的Item出现了重复的显示。在网上看到一些开发者也遇到了同样的数据重复的问题。并找了一些解决方案。例如:http://www.eoeandroid.com/thread-918482-1-1.html?_dsign=3d28cd51  每次操作之后将所有的组关闭在打开。使用这样的操作起到了一定的效果。但是测试还是偶尔能测出来数据重复的问题,时而出现,时而不出现。让人很是头疼。想在网上找类似的自定义控件,但是也没找到。(如果有人知道又类似控件希望能告知我一下)

然后我想Item的数量是由Adapter去控制的。另外我发现AdapterView有一个getCount的方法返回的是view的item的数量。AdapterView与ExpandableListview的关系如下图。之后我发现AdapterView.getCount返回的数量与Adapter的中返回的Adapter的数量不一致。问题也就是处在这里。



结合之前的解决方式,下面是我解决问题的代码。

private void initGroup(int count) {

        showProgress();
        if (list.size() == 0) {
            mRefreshView.showEmptyView();
        } else {
            mRefreshView.hideEmptyView();
        }
        final int realCount = listView.getCount();

        if (count == realCount) {
            hideProgress();
            return;
        } else {
            int size = list.size();
            for (int i = 0; i < size; i++) {
                listView.collapseGroup(i);
                listView.expandGroup(i);
            }
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mHandler.sendEmptyMessage(realCount);
                }
            }, 500);
        }
    }
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            initGroup(msg.what);
        }
    };

方法不是跟高级,但是达到了效果,希望有更好的方法的大神能提出高见。

猜你喜欢

转载自blog.csdn.net/wu_zi/article/details/51643718