码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-25 12:55:05      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

需求:根据某种需要,可能需要动态调整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 >

 

此结构较之前的结构增加了一个多余的Layoutitem_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/)。


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

标签:

原文地址:http://my.oschina.net/u/2401564/blog/496734

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!