如何实现可动态调整隐藏header的listview

本文探讨了在Android开发中,如何动态调整ListView的Header,包括添加、移除和隐藏的技巧。解决了ListView.addHeaderView()方法在setAdapter()后调用会抛异常的问题,并分享了在不同场景下隐藏HeaderView的有效方法。
摘要由CSDN通过智能技术生成

(转自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html)

需求:根据某种需要,可能需要动态调整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的目的,但实际效果(魅族MX上测试发现),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上,如此就可以规避新的问题了。

转载于:https://www.cnblogs.com/jenson138/p/4647893.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值