论坛首页 移动开发技术论坛

【BUG解决】Cannot add header view to list -- setAdapter has already been called.

浏览 7544 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-01-05  

今天在为ExpandableListView addHeaderView(加头view),运行报错:

Cannot add header view to list -- setAdapter has already been called.

 

提示我已经设置了适配器,原来addHeaderView(View v)方法 只能在父控件 setAdapter之前调用!

 

仔细想想也很容易解释,addHeaderView是为list加入 头视图,而setAdapter是为控件匹配内容。哪有先匹配了内容,再插入view的道理,皮之不存毛将焉附? 

 

 

   发表时间:2012-01-12  
header/footer View是ListView的设计缺陷。
查看setAdapter源码可得知。若在之前设置了header和footer,则setAdapter会将传入的Adapter包装成为一个FixedViewAdapter。
这种方式灵活性欠佳哉。
0 请登录后投票
   发表时间:2012-03-05  
求解决方案
0 请登录后投票
   发表时间:2012-03-05  
addHeaderView(View v)方法 在父控件 setAdapter之前调用啊!
0 请登录后投票
   发表时间:2012-03-05  
libo19881179 写道
addHeaderView(View v)方法 在父控件 setAdapter之前调用啊!

但是 最开始的时候 不需要他显示出来的。所以不能先add
考虑将需要加进来的view 设置为 gone 再加入 , 但还是占据了区域
0 请登录后投票
   发表时间:2012-03-06  
可以通过setLayoutParam来解决
0 请登录后投票
   发表时间:2012-03-07  
pejaming 写道
可以通过setLayoutParam来解决

据我所知这个问题无解,通过setLayoutParam这个我还真不知道。楼上能否介绍一二?万分感谢
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics