ListView 添加 HeaderView常见错误

1.addHeaderView异常:

最近在做通讯录开发时使用ListView,发现一个奇怪的问题:当添加一个ImageView 作为HeaderView时,发现ImageView长宽始终是1:1的大小,即调用 ListView.addHeaderView(mImageView) 之后mImageView尺寸布局被忽略。具体代码如下:

list_view_header_layout.xml

<?xml version="1.0" encoding="utf-8"?>  
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:scaleType="fitCenter"  
    android:src="@drawable/ruanjianguanli_banner" >  
</ImageView>  

java

mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, null);  
mListView.addHeaderView(mImageView); 

上面的调用方式会使XML布局中ImageView的LayoutParam丢失,调用 ListView.addHeaderView(mImageView) 之后mImageView尺寸布局被忽略

修改为如下方式调用,则不会丢失LayoutParam

mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, mListView, false);  
mListView.addHeaderView(mImageView);  

 

2.LayoutInflater的inflate()函数的用法:

View view = inflate(int resource, ViewGroup root, boolean attachToRoot)   
resource:布局文件ID   
root:父ViewGroup对象,   
attachToRoot:是否将“渲染”出来的View添加到上面的root中   

root和attachToRoot是共同作用的: 
1,有root,同时attachToRoot为false,那么inflate()返回的就是“翻译”得到的view 
2,有root,同时attachToRoot为true,那么inflate()就是将“翻译”得到的view添加到root后,然后返回root 
3,无root,同时attachToRoot为false,那么inflate()返回的就是“翻译”得到的view
4,无root,同时attachToRoot为true,报错

root还有一个重要的作用就是为“渲染”得到的view添加合适的LayoutParam,并且如果并不想将得到的View添加到root的话

1. View view = mLayoutInflater.inflate(R.layout.header, new ListView(mContext), false);  
2. View view = mLayoutInflater.inflate(R.layout.header, new LinearLayout(mContext), false);  
3. View view = mLayoutInflater.inflate(R.layout.header, new RelativeLayout(mContext), false);  

上面得到的View,除了view的LayoutParam分别为AbsListView.LayoutParams,LinearLayout.LayoutParams,RelativeLayout.LayoutParams之外,内容都一致。  

  

 

  

时间: 2024-12-27 10:27:38

ListView 添加 HeaderView常见错误的相关文章

WCF分布式开发常见错误解决(1):An error occurred while attempting to find services at...添加服务引用出错

      WCF分布式开发常见错误解决(1):An error occurred while attempting to find services at...添加服务引用出错 当我们在客户端添加WCF服务引用的时候出错,信息如下 下载“http://localhost:8001/WCFService”时出错. 无法连接到远程服务器 由于目标机器积极拒绝,无法连接. 127.0.0.1:8001 Metadata contains a reference that cannot be reso

Linux 源码安装apache 与常见错误解决

文档原位置 一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级. 升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包(谨慎!小心).下面是使用源代码的方式行,它们的下载路径为:(~_~)这里不再说到那里下载了,相信你有能力找的到的,呵呵 2.安装依赖的软件包(当然这里可以认为成需要的编译环境咯!) yum -y install pcre-devel yum -y install  "Developmen

Python程序的常见错误(收集篇)

关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Application Development)中颇为受欢迎,同时Python还能作为脚本语言或者胶水语言讲现成的组件或者服务结合起来.Python支持模块(modules)和包(packages),所以也鼓励程序的模块化以及代码重用. 关于本文 Python简单.易学的语法可能会误导一些Python程序员(特别是那些

关于ListView的HeaderView

1. 可点击/不可点击 private void addHeaderView(){ View headerView = this.mInflater.inflate(R.layout.XXX_header_info, this.listView, false); this.headerInfo = (TextView) headerView.findViewById(R.id.XXX_HeaderInfo); //this.listView.addHeaderView(headerView);

Android NDK 开发(三)--常见错误锦集合Log的使用【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误,很多时候调试这些错误的时候,显得比调试Java代码要复杂,一方面是导致错误的原因很多很杂,另一方面NDK开发涉及到C/C++代码的编写,很多程序员对此不熟悉.那么这篇博客就总结一下,在NDK开发中经常出现的一些问题,并且尝试提供一些正确的解决方案,方便在开发时能够快速定位到错误,更改错误,当然了,错

Python程序员的10个常见错误(转)

add by zhj:虽然学Python也有两年了,但这些问题的确容易犯,看来对Python的理解还有些地方不深入.先转了,有时间再好好看 译文:http://blog.jobbole.com/68256/ 本文由 伯乐在线 - datorhjaelten 翻译.未经许可,禁止转载!英文出处:toptal.欢迎加入翻译小组. 关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Ra

为GridView添加HeaderView

实现这个功能一般有两种思路,一种思路是使用ScrollView+GridView,第二种思路是使用ListView来实现GridView的效果. 第一种思路的具体实现是把HeaderView和GridView都放到ScrollView里面,这里要解决的问题是ScrollView和GridView滑动手势的冲突问题,解决办法是让GridView充满ScrollView,不让GridView滑动而只让ScrollView滑动.具题做法是重载GridView的onMeasure()方法. public

Git 项目上传至github入门实战并解决常见错误

1.Git GUI 首先,在push到github的项目必须先建立版本(即creat  repository的名字一样),一般是先pull下来,再push(为了防止有其他人提交了代码,而你却不知道,造成的一些冲突) 进行第三步时,必须写提交描述,否则报错,如下 最后一步,需要填写目的路径,直接github上粘贴相应版本路径即可,还必须输入github的名字和密码 成功后,如图: 下面写一下,一般push失败的原因,其实上面也已经提到,(为了防止有其他人提交了代码,而你却不知道,造成的一些冲突)所

ListView添加头布局和脚布局

 ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动布局外面套一层ScrollView(好low):3.头布局脚布局.有的时候我们用多布局并不能很好的实现,所以头布局跟脚布局就是我们最好的选择了:学过了ListView的话原理很简单,没啥理解的东西,直接贴代码了: 效果图:                   正文部分布局: fragment_cla