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

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

时间: 2024-08-24 12:14:54

如何实现可动态调整隐藏header的listview的相关文章

iOS 动态调整tableViewCell 高度

效果图: 分析:从plist文件中读取数据源,plist最外层是一个Array,Array中存放的是字典,每个字典存放的key值并不完全相同. 一.单元格复用问题 1.首先读取数据源,建立数据模型,这里我只创建了一个数据模型,包含plist中所有的key值所对应的属性. 2.创建tableView,同时定制Cell, 根据category,可以分成四种单元格,在tableView创建单元格时创建4种代码如下: 1 -(UITableViewCell *)tableView:(UITableVie

c++设计成员变量可动态调整的动态类结构

本文主要介绍一下如何使用c++设计成员变量可动态调整的抽象动态类结构.首先介绍一下项目中以前使用的一种类结构:静态类结构 1.静态类结构 很多时候,在项目开发中设计类结构时,我们往往有一种简单.直接的惯性思维:原始数据是什么样子,设计中类成员就包含相应的成员变量,这样的类我把它称之为静态类结构.静态类结构有两个特点. 1.1特点一:类结构抽象能力不足. 静态类结构强依赖于原始数据,是针对具体编程而不是针对抽象编程.一旦原始资源新增或者删除字段,类结构就要相应的调整类成员变量,费事费力,而且是重复

写个js动态调整图片宽高 (原创)

<body style="TEXT-ALIGN: center;"> <div id="testID" style="background:red;MARGIN-RIGHT: auto; MARGIN-LEFT: auto; width:173;height:184"> <img src="http://e.hiphotos.baidu.com/image/pic/item/024f78f0f736afc3

Log4cpp配置文件及动态调整日志级别的方法

一.log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试: 可扩展的.多种方式记录日志,包括命令行.文件.回卷文件.内存.syslog服务器.Win事件日志等: 可以动态控制日志记录级别,在效率和功能中进行调整: 所有配置可以通过配置文件进行动态调整: 多语言支持,包括Java(log4j),C++(log4cpp.log4cplus),C(log4c),python(log4p)等: 二.原

easyui_动态添加隐藏toolbar按钮

目标:动态添加隐藏toolbar,比如根据权限动态显示新增.修改.删除按钮等 思路:先初始化toolbar的所有按钮,加载datagrid其它信息,再根据权限显示隐藏toolbar按钮 步骤: 1.加载步骤 1 2 3 4 5 $(function() {     easyToolbarInit();     //初始化toolbar按钮     easyInitGrid({title:"管理",url:"/sa/add"});  //加载datagrid其它信息,

[转] iOS TableViewCell 动态调整高度

原文: http://blog.csdn.net/crayondeng/article/details/8899577 最近遇到了一个cell高度变化的问题,在找解决办法的时候,参考了这篇文章,觉得不错 在写sina 微博的显示微博内容时,用到cell进行显示,那么就要考虑到不同微博内容导致的cell高度问题.在微博显示的内容中包括了文字和图片,那么就要计算文字部分的高度和图片部分的高度.这篇博文就记录一下如何处理cell高度的动态调整问题吧! 一.传统的方法 在 tableview的deleg

下压栈(LIFO) (能动态调整数组大小的实现)

import java.util.*; // 下压栈(LIFO) 能动态调整数组大小的实现 public class ResizeArrayStack<Item> implements Iterable<Item> { @SuppressWarnings("unchecked") private Item[] a=(Item[]) new Object[1]; private int N; public boolean isEmpty() { return N=

redis-cluster的实例动态调整内存

当redis.conf中的最大内存配置为10G的时候,恰好程序已经写满了,但是物理主机是有内存的, 此时可以通过config set xxxx xxxx 来设置实例的内存大小,而不需要重启实例. 获取当前最大内存的大小: config get maxmemory 修改内存大小: config set maxmemory 22474836480 可以动态调整的参数可参考官方文档: https://redis.io/commands/config-set

Linux下动态调整LVM文件系统大小

LINUX下可以通过LVM动态调整一个已挂载的文件系统大小 LV可以根据需求增大或减小,但是LV改变大小以后,在LV中的文件系统也需要相应的改变大小.这个概念非常重要,如果没有相应的调整LV中文件系统的大小,那么可能导致数据误用! 扩展文件系统: 1.umount掉文件系统 2.先加LV e2fsck -f /dev/VG00/LV01    必须检查,lvresize要求 lvresize -L +1G /dev/VG00/LV01    (变成+了,参数的使用非常直观)(resize命令可直