首页
社区
课程
招聘
[旧帖] [原创]如何实现可动态调整隐藏header的listview 0.00雪花
发表于: 2015-8-25 14:44 1648

[旧帖] [原创]如何实现可动态调整隐藏header的listview 0.00雪花

2015-8-25 14:44
1648
需求:根据某种需要,可能需要动态调整listview的页眉页脚,譬如将header作为显示板使用。

难点:listView.addHeaderView()方法必须在setAdapter()方法前调用,否则就会抛异常。至于为什么会抛异常,查看下ListView的源代码即可发现。因此,在设置HeaderView之后又想将headerView移除或者隐藏,则需要绕很大的弯子:将adapter保存起来-移除headerView-(或者更换headerview)-再将adapter设置上去。

隐藏headerview思路:使用View.GONE属性进行隐藏
尝试1.itemView结构如下:
1 <LinearLayout android:id="@+id/item_root"
2     android:layout_width="fill_parent"
3     android:layout_height="50dip"
4     android:orientation="vertical" >
5 <TextView  android:id="@+id/tv_1" />
6 <TextView  android:id="@+id/tv_2" />
7 </LinearLayout >

按道理,最后一句应该可以起到隐藏headerView的目的,但实际效果,item_root的地方的确没有控件了,但item_root占用的50dip高度还在,即原来headerView的地方变成了一片空白区域!和View.INVISIBILE效果一样了!

继续尝试如下,修改itemView的结构:
1 <LinearLayout android:id="@+id/item_root"
2     android:layout_width="fill_parent"
3     android:layout_height="50dip"
4     android:orientation="vertical" >
5  <LinearLayout android:id="@+id/item_container"
6 <TextView  android:id="@+id/tv_1" />
7 <TextView  android:id="@+id/tv_2" />
8  </LinearLayout>
9 </LinearLayout >

此结构较之前的结构增加了一个多余的Layout(item_container)来囊括item内部控件。此时,如果在item_container .setVisibility(View.GONE)则可以完美实现隐藏HeaderView的目的!

结论:View.GONE属性貌似不作用在根Layout上。

新的问题:
如果在item_root上使用了Shape背景,且此背景存在MinSize,那么此方法又失效了。。。
规避处理:如果的确必须要在HeaderView上添加背景background的话,那么请将background设置在item_container上吧,不要设置在item_root上,如此就可以规避新的问题了。推荐一款APP内测平台-爱内测(http://www.ineice.com/)。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不懂。。。。
2015-8-25 17:35
0
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
页角和页眉确实需要在设置adapter前进行设置,但如果暂时不需要显示是需要使用代码隐藏,如:
listView.removeFooterView(true)

然后带你需要显示的地方在设置
listView.addFooterView(footer)

另外,记住layout只是控制初始化属性,代码设置还是需要在代码进行设置
2015-8-25 22:18
0
游客
登录 | 注册 方可回帖
返回
//