您的位置:首页 > 移动开发 > Android开发

ListView添加HeaderView出现Cannot add header view to list -- setAdapter has already been called.

2016-11-22 19:04 483 查看
今天项目由于需要根据动态数据来控制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,才能生效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐