2013.05.16——— android 关于listview的bug
参考:
http://www.pocketdigi.com/20111018/548.html
错误信息
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131165479, class com.wmyc.activity.com.listview.pulllistview.XListView) with Adapter(class com.wmyc.activity.com.listview.multicolumnlistview.internal.PLA_HeaderViewListAdapter)] mItemCount: 2, mAdapter.getCount(): 7
自认为代码没有写错 但是 如果 我切换activity速度非常快的话 基本上都会报这个错
我的代码如下:
private class LoadDataThread implements Runnable{
private int type;
public LoadDataThread(int type){
this.type = type;
}
@Override
public void run() {
if(type==IXListViewListener.TYPE_REFRESH){
mIndexShow = 0;
}
ArrayList<InfoCloth> list = mDaoCloth.getAllByPage(mIndexShow, mTagId);//分页加载数据
switch(type){
case IXListViewListener.TYPE_LOADMORE:
mArrData.addAll(list);
break;
case IXListViewListener.TYPE_REFRESH:
mArrData.clear();
mArrData.addAll(list);
break;
}
System.out.println("LoadDataThread");
if(mArrData.size()==DBOpenHelper.PAGE_COUNT){//如果达到每页显示个数 就分页
mIndexShow = mIndexShow+1;
}
System.out.println("1111111111");
if(list.size() < DBOpenHelper.PAGE_COUNT){
System.out.println("2222222222");
mHandler.sendEmptyMessage(MSG_FOOTVIEWGONE);
}
System.out.println("33333333333");
Message msg = new Message();
msg.arg1 = type;
msg.what = Constant.MSG_SUC;
mHandler.sendMessage(msg);
System.out.println("444444444444");
}
}
然后 我在handler里面 更新listview
//handler
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(_dialog!=null && _dialog.isShowing()){
_dialog.dismiss();
}
switch(msg.what){
case Constant.MSG_FAIL:
break;
case Constant.MSG_SUC:
showData();
break;
}
}
};
这个就是我老是报错的代码 我在线程里面 更改了adapter绑定的数据,然后再handler里面 更新listview
搜了下,发现很多人都遇到这个问题
listView1.setVisibility(View.GONE);
listAdapter.notifyDataSetChanged();
listView1.setVisibility(View.VISIBLE);
说这样写可以解决 反正我这样写是没解决 可能我写的有问题吧
最后,我把ListView的添加,删除,清空等UI操作都用Handler来处理,上面的代码 稍微改下
private class LoadDataThread implements Runnable{
private int type;
public LoadDataThread(int type){
this.type = type;
}
@Override
public void run() {
if(type==IXListViewListener.TYPE_REFRESH){
mIndexShow = 0;
}
mArrDataTemp = mDaoCloth.getAllByPage(mIndexShow, mTagId);//分页加载数据
Message msg = new Message();
msg.arg1 = type;
msg.what = Constant.MSG_SUC;
mHandler.sendMessage(msg);
System.out.println("444444444444");
}
}
新写一个临时的list集合 用于存储得到的数据
case Constant.MSG_SUC:
switch( msg.arg1){
case IXListViewListener.TYPE_LOADMORE:
mArrData.addAll(mArrDataTemp);
break;
case IXListViewListener.TYPE_REFRESH:
mArrData.clear();
mArrData.addAll(mArrDataTemp);
break;
}
System.out.println("LoadDataThread");
if(mArrData.size()==DBOpenHelper.PAGE_COUNT){//如果达到每页显示个数 就分页
mIndexShow = mIndexShow+1;
}
System.out.println("1111111111");
if(mArrDataTemp.size() < DBOpenHelper.PAGE_COUNT){
System.out.println("2222222222");
mFallView.setPullLoadEnable(false);
}
showData();
break;
}
就这样 我大概测了下 暂时没再遇到这个问题
分享到:
相关推荐
NULL 博文链接:https://trylovecatch.iteye.com/blog/1158065
安卓Android源码——重写listview实现下拉刷新.zip
android关于listview之列表分组,像Q上一样显示列表项
Android源码——listView学习源码.zip
安卓Android源码——使用listView实现的树状结构.zip
安卓Android源码——listView.rar
Android源码——ListView分页功能源码.zip
Android Menu和ListView 整合设计 源码 package com.MyMenu; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import ...
安卓Android源码——仿iphone的listview下拉更新.zip
安卓Android源码——listView1.rar
安卓Android源码——PinnedHeaderListView联系人listview.zip
安卓Android源码——动态ListView,支持异步更新列表,异步更新图片.rar
安卓Android源码——Listview分页加载数据.zip
安卓Android源码——ListView下拉刷新 Demo.zip
安卓Android源码——ListView滚动气泡提示.rar
安卓Android源码——双列关联listview.zip
安卓Android源码——上下拖动的listview.zip
安卓Android源码——双列关联listview.rar