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;}@Overridepublic 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


//handlerprivate Handler mHandler = new Handler(){@Overridepublic 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;}@Overridepublic 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;}



就这样 我大概测了下 暂时没再遇到这个问题

更多相关文章

  1. Android应用程序组件Content Provider的启动过程源代码分析(6)
  2. android 数据库 备份还原
  3. android常用代码片段
  4. Android系统进程Zygote启动过程的源代码分析(3)
  5. Android ListView SimpleAdapter ArrayList 数据更新问题 zhuan
  6. Android SQLiteOpenHelper(手机数据库)
  7. Android webview注入自己的js代码(js传入function等其他参数解决)
  8. Android音频口数据通信开发;通过静态分析工具了解IPA实现 -- iOS/
  9. WebView之js调用Android类的方法传递数据 - 依凡王子

随机推荐

  1. android中webview调用拨号盘
  2. Android判断是否有网络
  3. Android 判断是否是数字及数字的范围
  4. Android 获取本机唯一序列号 和可变UUID
  5. Android 文件相关总结
  6. Android Error之BufferOverflowException
  7. android studio中的错误transformClasses
  8. Android:程序跳过登录界面直接进入主界面(
  9. android webservice(cfx:gbk) 乱码处理
  10. ubuntu ffmpeg 4.0.1 android 编译过程记