需求:根据某种须要,可能须要动态调整listview的页眉页脚,譬如将header做为显示板使用。android
难点:listView.addHeaderView()方法必须在setAdapter()方法前调用,不然就会抛异常。至于为何会抛异常,查看下ListView的源代码便可发现。所以,在设置HeaderView以后又想将headerView移除或者隐藏,则须要绕很大的弯子:将adapter保存起来-移除headerView-(或者更换headerview)-再将adapter设置上去。spa
隐藏headerview思路:使用View.GONE属性进行隐藏ip
尝试1.itemView结构以下:get
1 <LinearLayout android:id="@+id/item_root"it
2 android:layout_width="fill_parent"io
3 android:layout_height="50dip"List
4 android:orientation="vertical" >方法
5 <TextView android:id="@+id/tv_1" />layout
6 <TextView android:id="@+id/tv_2" />listview
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/)。