我们最常用的便是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方法详解(转载整理)相关推荐

  1. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  2. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  3. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  4. php 文件扫描去重,PHP中的去重方法详解和文件下载

    本文主要和大家分享PHP中的去重方法详解和文件下载,在php中文件导入过程中,经常会遇到重复事件,那么就需要我们去重,然后进行下载. 1.思想 先设置一个存储主键数组,和一个空数组.解析文件,然后看要 ...

  5. keep alive PHP,vue中keep-alive使用方法详解

    这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...

  6. java中main是什么_Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  7. android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解

    本文实例讲述了Android数据持久化之读写SD卡中内容的方法.分享给大家供大家参考,具体如下: 前面文章里讲的那三个方法:openFileOutput.openFileInput虽然都能通过流对象O ...

  8. session在PHP中的用法,PHP中session使用方法详解

    php中session详解 综述 Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.从上述的定义中我们可以看到,Session实际 ...

  9. Promise中的then方法详解

    Promise详解 /* * 创建Promise实例的时候得传一个函数 executor,并且这个函数接收两个参数+ resolve函数:将实例的状态从 pending 修改为 fulfilled/r ...

  10. java arrays.aslist()_Java中Arrays.asList()方法详解及实例

    Arrays.asList() 是将数组作为列表. 问题来源于: public class Test { public static void main(String[] args) { int[] ...

最新文章

  1. CentOS 7.4搭建Kubernetes 1.8.5集群
  2. c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法
  3. Storm【技术文档】-Worker Executor Task的关系
  4. linux终端炫酷命令,你不得不知道11个炫酷的 Linux 终端命令
  5. excel c# 输出
  6. .NET 某电商交易平台Web站 CPU爆高分析
  7. waring Release版本
  8. Foxit PDF SDK 下载地址
  9. Squid 配置文件详解
  10. chmod 更改文件的权限
  11. 分支定界 matlab,分支定界法matlab程序
  12. java系列视频教程下载
  13. 应聘flash游戏开发面试技巧及建议
  14. 悟彻菩提真妙理 断魔归本合元神
  15. 搭建Cacti监控(2)
  16. JAVA 文件上传格式限制_关于servlet文件上传限制文件大小的问题,求高手帮忙
  17. python+pands+matplotlib分析Excel表格
  18. 怎么把图片文件转换成PDF文件
  19. Ubuntu 18.04安装坚果云后打开出现白板
  20. 下载文件,文件为中文名出现乱码的解决办法

热门文章

  1. Android发送edp服务器,Android6.0调试笔记之edp屏无法点亮问题怎么解决
  2. W10无法联网,右下角WIFI图标消失;经过网络重置后,网络适配器也全部丢失。
  3. python语音引擎深度学习_基于Python的深度学习BP网络语音增强方法研究
  4. 个人github地址 https://github.com/Gerry1218
  5. 语句SELECT TOP 100 PERCENT在不同数据库中的区别
  6. php curl post 很慢,php的curl函数模拟post数据提交,首次速度非常慢的处理办法 | 学步园...
  7. 验收测试:α测试、β测试
  8. USB-IF发布针对盲文点字显示器的HID标准
  9. 论以建筑全生命周期管理建设公司大数据平台
  10. 浅学 --------- CSS