ListView添加HeaderView出现Cannot add header view to list -- setAdapter has already been called.
来源:互联网 发布:杭州两年java工资 编辑:程序博客网 时间:2024/06/06 02:17
今天项目由于需要根据动态数据来控制ListView的头部,但在4.2系统出现如下异常:
java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. at android.widget.ListView.addHeaderView(ListView.java:264)
分析4.2的源码如下:4.2的ListView需要在setAdapter之前调用addHeaderView,否则会出现异常。
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(); } }
那么对于需要根据数据来动态控制是否addHeaderView,需要怎么办呢?可以通过控制HeaderView的Visiable属性进行控制。初始化就加载HeaderView,设置为GONE。然后根据
数据动态控制,这里需要注意如果HeaderView的布局有2层以上,需要拿到第二层的layout去设置Gone,才能生效。
2 0
- ListView添加HeaderView出现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.
- 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
- java.lang.IllegalStateException:Cannot add header view to list==setAdapter has already been called.
- java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been calle
- ListView setAdapter has already been called 异常
- ListView setAdapter has already been called 异常
- ListView setAdapter has already been called 异常
- ParseResult Exception:java.lang.IllegalStateException: Cannot add header view to list -- setAdapter
- ParseResult Exception:java.lang.IllegalStateException: Cannot add header view to list -- setAdapter
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- Android数据存储的五种方式
- java基础---I/O流--字节流(2)
- Unity客户端与后台通信
- Android 用 adb forword + Tcpdump + Wireshark 实时抓包的方法
- 链栈 链队列 share
- ListView添加HeaderView出现Cannot add header view to list -- setAdapter has already been called.
- v4l2-ctl 控制命令
- Activity的生命周期记录
- RAID及软RAID的实现,包括各级别RAID的原理及各级别RAID的实现
- Hadoop文档学习笔记
- Spring Boot中使用MongoDB数据库
- 计数排序
- Hust oj 1861 猥琐宅男——koko(DP)
- Servlet cookies处理