本博文为转载,由于找不到第一作者所以只能留下我转自的地址:
http://blog.csdn.net/shaoyezhangliwei/article/details/50385912

异常提示:java.lang.IllegalStateException: Cannot add header view to list – setAdapter has already been called.
产生原因:addHeaderView()调用在setAdapter()之后,并且该代码运行在Android4.3之前的系统版本。Android SDK与API Level对应表

我们来看看(Android4.3)API-18 和 (Android4.2)API-17的Listview代码片段:

API-18

public void addHeaderView(View v, Object data, boolean isSelectable) {  final FixedViewInfo info = new FixedViewInfo();  info.view = v;  info.data = data;  info.isSelectable = isSelectable;  mHeaderViewInfos.add(info);  // Wrap the adapter if it wasn't already wrapped.  if (mAdapter != null) {  if (!(mAdapter instanceof HeaderViewListAdapter)) {  mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, mAdapter);  }  // In the case of re-adding a header view, or adding one later on,  // we need to notify the observer.  if (mDataSetObserver != null) {  mDataSetObserver.onChanged();  }  }
}  

API-17

public void addHeaderView(View v, Object data, boolean isSelectable) {  if (mAdapter != null && ! (mAdapter instanceof HeaderViewListAdapter)) {  throw new IllegalStateException(  "Cannot add header view to list -- setAdapter has already been called.");  }  FixedViewInfo info = new FixedViewInfo();  info.view = v;  info.data = data;  info.isSelectable = isSelectable;  mHeaderViewInfos.add(info);  // in the case of re-adding a header view, or adding one later on,  // we need to notify the observer  if (mAdapter != null && mDataSetObserver != null) {  mDataSetObserver.onChanged();  }
}  

在API-17中,假如adapter不为空,则会直接抛出异常,而在API-18中则做了相关的优化。

建议

木有建设性的提议,只能提醒大家,目前市面上主流的Android系统还是Android4.3以下版本,所以在使用addHeaderView()要注意这一点。

转载于:https://www.cnblogs.com/codenoodles/p/6421165.html

addHeaderView()异常 —— setAdapter has already been called相关推荐

  1. 当ListView有Header时,onItemClick里的position不正确

    当给ListView加了一个HeaderView后(代码如下),我们发现,onItemClick方法里的position参数的值不是我们所期望的,比如点击ListView的第一行,我们期望的posit ...

  2. ListView setAdapter has already been called 异常

    本文参考:http://blog.csdn.net/androiddevelop/article/details/8474939 异常提示:Java.lang.IllegalStateExceptio ...

  3. java getitemcount_RecyclerView.Adapter中的getItemCount() 返回数组的size是出现异常?

    1.问题描述:RecyclerView.Adapter中的getItemCount() 返回数组的size是出现异常.网络用的是okhttp,数据库框架是litepal,功能是从网络上获取JSON数据 ...

  4. Android listview addHeaderView 和 addFooterView 详解

    addHeaderView()方法:主要是向listView的头部添加布局 addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添 ...

  5. android设置错误页面,Android ViewPager设置当前项目/页面时抛出IndexOutOfBounds异常

    我有一个ViewPager有三个项目.我试图设置ViewPager查看最右边的页面(这将是第二个元素).这是返回IndexOutOfBounds异常,虽然我知道索引应该在边界.这是确切的堆栈: 02- ...

  6. ViewPager异常,对ViewPager源码分析

    今天遇到以下异常: java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's cont ...

  7. Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示

    上一篇:Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果).自定义背景图片.UI优化调整 添加管理城市 新版------------------- 一.添加管理城市页面 二.沉浸式 ...

  8. 南京学思XSuperNest使用addHeaderView注意事项

    在做学思钢板管理系统的项目中用到了addHeaderView,现在把注意事项记下来 1.item内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的 ...

  9. method ‘void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)‘ on a null object refe

    异常产生环境 在android 使用dialog 引入Spinner 控件时产生异常 异常描述 Caused by: java.lang.reflect.InvocationTargetExcepti ...

最新文章

  1. Xcode没有pch文件
  2. HTTP通信协议的组成
  3. python 流式计算框架_流式计算的三种框架:Storm、Spark和Flink
  4. linux shell 博客,【博客侠】Linux Shell脚本系列:开始上手(1)
  5. 20.校准相机——直接线性校准不均匀,直接线性校准变换,几何误差_3
  6. Docker 以 docker 方式运行 jenkins
  7. Scala入门(2)
  8. html+JS+Jquery实现视频/图片上传并预览
  9. 进阶篇: ramdump分析--9 ram dump文件种类
  10. python勒索病毒代码_勒索病毒GandCrab-v5.04完整分析
  11. 淘宝自动查券找券返利机器人搭建教程
  12. app 手机网页一些小知识
  13. codewars体验
  14. 这些信贷数据埋点中不得不知的埋点知识
  15. 物理层(网线)、数据链路层(交换机)、网络层(IP协议、ARP协议、ICMP协议、路由器)、VLAN(虚拟局域网)、HSRP协议、ACL、NAT
  16. 单词 2012-01-19
  17. Power BI项目之某公司内部数据分析
  18. 通过Hyper-V的方式快速安装Linux虚拟机
  19. 1024程序员节,向改变世界的程序员致敬
  20. 加班两年只赚2千块:低姿态的人,挣不了大钱

热门文章

  1. ExtJS grid简单应用之 展示JSON数据
  2. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
  3. IT项目十大灾难(转载)
  4. Leetcode 136. 只出现一次的数字 解题思路及C++实现
  5. Leetcode 376. 摆动序列 解题思路及C++实现
  6. Mac 技术篇-Oracle数据库官方连接工具SQL Developer的安装与连接演示
  7. CTFshow 文件上传 web153
  8. CTFshow php特性 web144
  9. Centos下本地连接postgresql时出现认证错误的问题
  10. 【POJ1321棋盘问题】【poj2251Dungeon Master】【poj3278Catch That Cow】【poj1426Find The Multi】