欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Adapter刷新数据的坑

程序员文章站 2022-03-18 16:43:22
adapter刷新数据的时候,要能够刷新成功,要保证每次刷新的时候都是改变数据源。 于是,我这样做了,在适配器的构造方法里面写到: 刷新数据的时候调用adapter里面的方法:(用这种方法每次刷新都是改变adapter里面的数据源,保证每次都能够刷新成功,这种思路是没错的,然而,我犯放了一个错误,导 ......

adapter刷新数据的时候,要能够刷新成功,要保证每次刷新的时候都是改变数据源。

于是,我这样做了,在适配器的构造方法里面写到:

private List<ListBean> listItems = new ArrayList<>();
    private Context mContext;

    public ResultAdapter(Context context, List<ListBean> listItems) {
        super(context);
        this.mContext = context;
        this.listItems = listItems;
    }

刷新数据的时候调用adapter里面的方法:(用这种方法每次刷新都是改变adapter里面的数据源,保证每次都能够刷新成功,这种思路是没错的,然而,我犯放了一个错误,导致刷新后数据被清空了)

/**
     * 刷新数据
     *
     * @param listItems
     * @param keyWord
     */
    public void setData(List<ListBean> listItems) {
        if (listItems != null) {
            this.listItems.clear();
            this.listItems.addAll(listItems);
        }
        notifyDataSetChanged();
    }

我犯了什么错误呢?

我的构造方法错了,在adapter的构造方法里面,我用的是

this.listItems = listItems;

这样子传进去的listItem与adapter里面的listItem指向同一个对象,在刷新数据的方法中,我用了

if (listItems != null) {
            this.listItems.clear();
            this.listItems.addAll(listItems);
        }

adapter里面的listItems被清空了,导致外部传进来的listItem也被清空了,于是this.listItems.addAll(listItems);后依然为空,最终刷新数据后无反应。

转载请标明出处:http://www.cnblogs.com/tangZH/p/8535653.html