addHeaderView()异常 —— setAdapter has already been called
来源:互联网 发布:js eval函数缺少) 编辑:程序博客网 时间:2024/06/07 08:57
异常提示: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()要注意这一点。
4 0
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView发生错误—— setAdapter has already been called.
- ListView setAdapter has already been called 异常
- ListView setAdapter has already been called 异常
- ListView setAdapter has already been called 异常
- Cannot add header view to list -- setAdapter has already been called.
- Cannot add header view to list setAdapter has already been called
- ListView "Cannot add header view to list -- setAdapter has already been called."
- Listview:Cannot add header view to list -- setAdapter has already been called
- Cannot add header view to list -- setAdapter has already been called.
- java.lang.IllegalStateException:Cannot add header view to list==setAdapter has already been called.
- Cannot add header view to list -- setAdapter has already been called
- ListView添加HeaderView出现Cannot add header view to list -- setAdapter has already been called.
- java.lang.IllegalStateException:Cannot add header view to list==setAdapter has already been called.
- 欢迎使用CSDN-markdown编辑器
- h5 sessionStorage localStorage存储
- java中十六进制数字符串转为long类型
- Coursera Machine Learning 课程笔记之第一周:Introduction
- windows server 2012启动进入cmd解决方法
- addHeaderView()异常 —— setAdapter has already been called
- Linux下使用c#开发倒计时功能
- Xcode插件管理工具Alcatraz
- Android Studio 免安装版本
- Intent中的四个属性 action category data extras
- 私有化析构函数
- win10+vc6+单步调试报错
- 调用live555库lib的顺序
- 高效能人士的七个习惯