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