问题描述
项目中有这样一个场景,一个ListView下拉刷新,上拉加载更多。于是我把网络请求数据写在一个函数中,在上拉时通过分页获取数据添加到数据list的末尾,在下拉时清空数据重新从头获取数据。
//下拉刷新
public void onRefresh() {
curPage = 1;
datalist.clear();
getDataList();
}
//上拉加载更多
public void onLoadMore() {
curPage++;
getDataList();
}
结果下拉刷新报错了
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.get(ArrayList.java:437)
at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:168)
at android.widget.HwAbsListView.checkIsEnabled(HwAbsListView.java:1045)
at android.widget.ListView.dispatchDraw(ListView.java:3646)
at android.view.View.draw(View.java:21654)
at android.widget.AbsListView.draw(AbsListView.java:4608)
at android.view.View.updateDisplayListIfDirty(View.java:20511)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4586)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4559)
......
问题原因
在其它线程修改了数据list,并且没有及时更新,导致主线程绘制时报错
解决方案
在修改了list之后立刻调用 adapter.notifyDataSetChanged();进行更新
public void onRefresh() {
curPage = 1;
datalist.clear();
adapter.notifyDataSetChanged();
getDataList();
}