如何实现可动态调整隐藏header的listview
来源:互联网 发布:文明4 mac 编辑:程序博客网 时间:2024/04/29 04:55
需求:根据某种需要,可能需要动态调整listview的页眉页脚,譬如将header作为显示板使用。
难点:listView.addHeaderView()方法必须在setAdapter()方法前调用,否则就会抛异常。至于为什么会抛异常,查看下ListView的源代码即可发现。因此,在设置HeaderView之后又想将headerView移除或者隐藏,则需要绕很大的弯子:将adapter保存起来-移除headerView-(或者更换headerview)-再将adapter设置上去。
隐藏headerview思路:使用View.GONE属性进行隐藏
尝试1.itemView结构如下:
<LinearLayout android:id="@+id/item_root"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="vertical" >
<TextView android:id="@+id/tv_1" />
<TextView android:id="@+id/tv_2" />
</LinearLayout >
此时,有如下逻辑:
ListView listView = xxxx;
listView.addHearderView(item_root);
listView.setAdapter(adapter);
adapter.add(xxxxx);添加数据
item_root.setVisibility(View.GONE);
按道理,最后一句应该可以起到隐藏headerView的目的,但实际效果(魅族MX上测试发现),item_root的地方的确没有控件了,但item_root占用的50dip高度还在,即原来headerView的地方变成了一片空白区域!和View.INVISIBILE效果一样了,汗死!
继续尝试如下,修改itemView的结构:
<LinearLayout android:id="@+id/item_root"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="vertical" >
<LinearLayout android:id="@+id/item_container"
<TextView android:id="@+id/tv_1" />
<TextView android:id="@+id/tv_2" />
</LinearLayout>
</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上,如此就可以规避新的问题了。
sam:在4.0中测试,可直接通过动态removeHeaderView和addHeaderView来动态设置表头,但在2.2中则会报错,所以为了使程序能有通用性,只能使用以上这种折衷的办法。
转自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html
难点:listView.addHeaderView()方法必须在setAdapter()方法前调用,否则就会抛异常。至于为什么会抛异常,查看下ListView的源代码即可发现。因此,在设置HeaderView之后又想将headerView移除或者隐藏,则需要绕很大的弯子:将adapter保存起来-移除headerView-(或者更换headerview)-再将adapter设置上去。
隐藏headerview思路:使用View.GONE属性进行隐藏
尝试1.itemView结构如下:
<LinearLayout android:id="@+id/item_root"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="vertical" >
<TextView android:id="@+id/tv_1" />
<TextView android:id="@+id/tv_2" />
</LinearLayout >
此时,有如下逻辑:
ListView listView = xxxx;
listView.addHearderView(item_root);
listView.setAdapter(adapter);
adapter.add(xxxxx);添加数据
item_root.setVisibility(View.GONE);
按道理,最后一句应该可以起到隐藏headerView的目的,但实际效果(魅族MX上测试发现),item_root的地方的确没有控件了,但item_root占用的50dip高度还在,即原来headerView的地方变成了一片空白区域!和View.INVISIBILE效果一样了,汗死!
继续尝试如下,修改itemView的结构:
<LinearLayout android:id="@+id/item_root"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="vertical" >
<LinearLayout android:id="@+id/item_container"
<TextView android:id="@+id/tv_1" />
<TextView android:id="@+id/tv_2" />
</LinearLayout>
</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上,如此就可以规避新的问题了。
sam:在4.0中测试,可直接通过动态removeHeaderView和addHeaderView来动态设置表头,但在2.2中则会报错,所以为了使程序能有通用性,只能使用以上这种折衷的办法。
转自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html
- 如何实现可动态调整隐藏header的listview
- 如何实现可动态调整隐藏header的listview
- 如何实现可动态调整隐藏header的listview
- 如何实现可动态调整隐藏header的listview
- 如何实现可动态调整隐藏header的listview
- 如何实现可动态调整隐藏header的listview
- 如何实现listview动态隐藏header
- 如何实现可动态调整隐藏head…
- ListView中Header动态隐藏
- 优雅地隐藏ListView的Header/Footer
- Android ListView中动态显示和隐藏Header&Footer的方法(转)
- ListView中动态显示和隐藏Header&Footer
- ListView中动态显示和隐藏Header&Footer
- 【android】 ListView 动态显示隐藏header和footer问题
- ListView中动态显示和隐藏Header&Footer(赞,取消)
- RingSDK技术文档:如何实现ListView列的隐藏
- 如何让listView的header无法点击?
- ListView 无法隐藏header footer视图的解决方法
- ubuntu设置IBus开机启动
- shrio入门
- 小学生算术
- iphone/ipad网站开发技巧整理
- OutputCacheProvider OutputCache的一点点认识
- 如何实现可动态调整隐藏header的listview
- 使用gSOAP开发实例(5) libxml2解析SOAP响应消息
- 连接模式与离线模式
- 数据质量总动员:Finding DQ 数据质量总动员
- 在ubuntu下vsftpd建立虚拟用户的详解
- 51单片机的特殊功能寄存器
- 只遍历一遍 找出两个重复的数(将数组中各元素作为新数组的下标)
- Maven仓库
- mac下反编译Android的apk步骤