addHeaderView()异常 —— setAdapter has already been called
来源:互联网 发布:游戏源码 编辑:程序博客网 时间:2024/06/07 09:19
本博文为转载,由于找不到第一作者所以只能留下我转自的地址:
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()要注意这一点。
0 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.
- jsp中应用JavaBean
- Android取消EditText自动获取焦点默认行为
- python中decorator的用法及原理(一)
- jsp页面跳转传值(变量)
- WebAPI请求——js调用
- addHeaderView()异常 —— setAdapter has already been called
- Laravel 5.2 使用ckeditor 及 ckfinder
- 让用VS2012/VS2013编写的程序在XP中顺利运行
- jquery-barcode:js实现的条码打印
- vim 常见操作
- LeetCode 292 -Nim Game ( JAVA )
- C语言输入,输出那些事
- OS开发拓展篇—UIDynamic(捕捉行为)
- 四大组件之Broadcast Receiver