LayoutInflater中的inflate方法详解(转载整理)
我们最常用的便是LayoutInflater的inflate方法,这个方法重载了四种调用方式,分别为:
1.public View inflate(int resource, ViewGroup root)
2.public View inflate(int resource, ViewGroup root, boolean attachToRoot)
3.public View inflate(XmlPullParser parser, ViewGroup root)
4.public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)
其中:
1.resource 布局的资源id
2.root 填充的根视图
3.attachToRoot 是否将载入的视图绑定到根视图中
4.parser Xml解析布局文件,生成View对象。
然后1中调用了:inflate(resource, root, root != null);
2中调用了:inflate(parser, root, attachToRoot);
3中调用了:inflate(parser, root, root != null);
因此虽然重载了四个方法,但是这四种方法最终调用的,还是第四种方式。第四种方式也很好理解,内部实现原理就是利用Pull解析器,对Xml文件进行解析,然后返回View对象。
在实现ListView的Adapter的时候我们经常可能会这样:
public View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = inflate(R.layout.item_row, null);}return convertView;
}
但是我们,在使用的时候可能就会发现一个问题,就是当我们在设置了我们的Item的高度,或者其他属性的时候没有效果,还是warp_content的效果。这就是我们没有使用正确的inflate方法。
这里我们有个例子我们可以看一看(具体的代码就不拿出来了,是个简单的例子):
第一张实现方式和效果如下:
inflate(R.layout.item_row, null);
第二张实现方式和效果如下:
inflater.inflate(R.layout.item_list, parent,false);
其中在布局Item的时候我们有设置高度为60dp,但是我们的第一张图显然是没有体现出来的,根本没有间距。第二张图,体现了出来。从这里我们可以看出使用第一种方式是没有办法实现的。具体的原因我们可以从其中最关键的一段代码中看见:
if (root != null) {if (DEBUG) {System.out.println("Creating params from root: " +root);}// Create layout params that match root, if suppliedparams = root.generateLayoutParams(attrs);if (!attachToRoot) {// Set the layout params for temp if we are not// attaching. (If we are, we use addView, below)temp.setLayoutParams(params);}}
从这段代码我们可以看见这个:root!=null&&!attachToRoot的时候我们才会去设置我们的布局的参数,因此我们的第一个方法他是没有传入这两个参数的,因此其实在实现的时候是没有设置我们的布局参数的。因此我们的设置是没有效果的。
通过这个例子,我想我们大概就应该就明白了inflate方法该如何使用了。
参考:
1、http://www.2cto.com/kf/201407/313054.html
2、http://blog.csdn.net/xyz_fly/article/details/21301303
3、http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/LayoutInflater.java?av=f
LayoutInflater中的inflate方法详解(转载整理)相关推荐
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- php 文件扫描去重,PHP中的去重方法详解和文件下载
本文主要和大家分享PHP中的去重方法详解和文件下载,在php中文件导入过程中,经常会遇到重复事件,那么就需要我们去重,然后进行下载. 1.思想 先设置一个存储主键数组,和一个空数组.解析文件,然后看要 ...
- keep alive PHP,vue中keep-alive使用方法详解
这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...
- java中main是什么_Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...
- android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解
本文实例讲述了Android数据持久化之读写SD卡中内容的方法.分享给大家供大家参考,具体如下: 前面文章里讲的那三个方法:openFileOutput.openFileInput虽然都能通过流对象O ...
- session在PHP中的用法,PHP中session使用方法详解
php中session详解 综述 Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.从上述的定义中我们可以看到,Session实际 ...
- Promise中的then方法详解
Promise详解 /* * 创建Promise实例的时候得传一个函数 executor,并且这个函数接收两个参数+ resolve函数:将实例的状态从 pending 修改为 fulfilled/r ...
- java arrays.aslist()_Java中Arrays.asList()方法详解及实例
Arrays.asList() 是将数组作为列表. 问题来源于: public class Test { public static void main(String[] args) { int[] ...
最新文章
- CentOS 7.4搭建Kubernetes 1.8.5集群
- c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法
- Storm【技术文档】-Worker Executor Task的关系
- linux终端炫酷命令,你不得不知道11个炫酷的 Linux 终端命令
- excel c# 输出
- .NET 某电商交易平台Web站 CPU爆高分析
- waring Release版本
- Foxit PDF SDK 下载地址
- Squid 配置文件详解
- chmod 更改文件的权限
- 分支定界 matlab,分支定界法matlab程序
- java系列视频教程下载
- 应聘flash游戏开发面试技巧及建议
- 悟彻菩提真妙理 断魔归本合元神
- 搭建Cacti监控(2)
- JAVA 文件上传格式限制_关于servlet文件上传限制文件大小的问题,求高手帮忙
- python+pands+matplotlib分析Excel表格
- 怎么把图片文件转换成PDF文件
- Ubuntu 18.04安装坚果云后打开出现白板
- 下载文件,文件为中文名出现乱码的解决办法
热门文章
- Android发送edp服务器,Android6.0调试笔记之edp屏无法点亮问题怎么解决
- W10无法联网,右下角WIFI图标消失;经过网络重置后,网络适配器也全部丢失。
- python语音引擎深度学习_基于Python的深度学习BP网络语音增强方法研究
- 个人github地址 https://github.com/Gerry1218
- 语句SELECT TOP 100 PERCENT在不同数据库中的区别
- php curl post 很慢,php的curl函数模拟post数据提交,首次速度非常慢的处理办法 | 学步园...
- 验收测试:α测试、β测试
- USB-IF发布针对盲文点字显示器的HID标准
- 论以建筑全生命周期管理建设公司大数据平台
- 浅学 --------- CSS