Android getViewById和getLayoutInflater().inflate()的详解及比较

 更新时间:2016年11月22日 10:48:01   作者:Mungo  
这篇文章主要介绍了Android getViewById和getLayoutInflater().inflate()的详解及比较的相关资料,这里对这两种方法进行了详细的对比,对于开始学习Android的朋友使用这两种方法是个很好的资料,需要的朋友可以参考下

Android getViewById和getLayoutInflater().inflate()的详解及比较

               由于本人刚刚学习Android 对于getViewById和getLayoutInflater().inflate()的方法该如何使用不知如何分别,这里就上网查下资料整理下,大家可以看下。

LayoutInflater

要明白这个问题首先要知道什么是LayoutInflater。根据Android的官方API解释:

Instantiates a layout XML file into its corresponding View objects.

由此可知,这个类是用来根据xml布局文件来实例化相应的View的。

getLayoutInflater()

根据API的文档解释,定义后面紧接着一句:

It is never used directly.

由此可知,LayoutInflater不能直接使用,即不能使用new来初始化。同时根据定义可以看出在实际开发中LayoutInflater这个类还是非常有用的,比如对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate() 来载入。

既然很有用,又不能直接初始化,肯定会有其他的方式获得LayoutInflater的实例。一般获得 LayoutInflater 有实例的三种方式:

 1. LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()
 2. LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 3. LayoutInflater inflater = LayoutInflater.from(context);

如果去看源码的话,其实这三种方式本质是相同的:

Activity 的 getLayoutInflater() 方法是调用 PhoneWindow 的getLayoutInflater()方法。

public PhoneWindow(Context context) { 
  super(context); 
  mLayoutInflater = LayoutInflater.from(context); 
}

可以看出它其实是调用 LayoutInflater.from(context)。

LayoutInflater.from(context):

public static LayoutInflater from(Context context) { 
  LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  if (LayoutInflater == null) { 
    thrownew AssertionError("LayoutInflater not found."); 
  } 
  return LayoutInflater; 
}

可以看出它其实调用 context.getSystemService()。

结论:所以这三种方式最终本质是都是调用的Context.getSystemService()。

inflate()

inflate 方法 通过 sdk 的 API文档可知:

Inflate a new view hierarchy from the specified xml resource.

即inflater() 是用来找 xml 布局文件,并且实例化成View 对象。

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test)); 
EditText editText = (EditText)view.findViewById(R.id.content);

getViewById()

getViewById()应该熟悉的,刚接触android时最先接触到的几个方法里肯定有他。findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。

最后说一句,对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate(),getLayoutInflater()返回LayoutInflater实例,所以,可以说getLayoutInflater().inflater() 是用来找 res/layout下的 xml 布局文件,并且实例化;findViewById() 是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView 等)。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android数据流之Channel和Flow实现原理和技巧详解

    Android数据流之Channel和Flow实现原理和技巧详解

    在 Android 应用程序的开发中,处理异步数据流是一个常见的需求,为了更好地应对这些需求,Kotlin 协程引入了 Channel 和 Flow,它们提供了强大的工具来处理数据流,本文将深入探讨 Channel 和 Flow 的内部实现原理、高级使用技巧以及如何在 Android 开发中充分利用它们
    2023-11-11
  • Android数字选择器NumberPicker使用详解

    Android数字选择器NumberPicker使用详解

    这篇文章主要为大家详细介绍了Android数字选择器NumberPicker的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Activity配置、启动和关闭activity实例详解

    Activity配置、启动和关闭activity实例详解

    这篇文章主要介绍了Activity配置、启动和关闭activity实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Android如何自定义修改打包apk名称

    Android如何自定义修改打包apk名称

    当我们进行apk打包时,默认会生成app-debug.apk或者app-release.apk,每次都需要手动去修改apk的名称,用于区分各个版本的名称,这篇文章主要介绍了Android自定义修改打包apk名称,需要的朋友可以参考下
    2024-03-03
  • Android NDK入门初识(组件结构开发流程)

    Android NDK入门初识(组件结构开发流程)

    这篇文章主要为大家介绍了Android NDK入门之初识组件结构开发流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能

    Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能

    这篇文章主要介绍了Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能的相关资料,需要的朋友可以参考下
    2016-11-11
  • Android开发 OpenGL ES绘制3D 图形实例详解

    Android开发 OpenGL ES绘制3D 图形实例详解

    这篇文章主要介绍了Android开发 OpenGL ES绘制3D 图形实例详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • Android常见的几种内存泄漏小结

    Android常见的几种内存泄漏小结

    本篇文章主要介绍了Android常见的几种内存泄漏小结。详细的介绍了内存泄漏的原因及影响和解决方法,有兴趣的可以了解一下。
    2017-03-03
  • Handler与Android多线程详解

    Handler与Android多线程详解

    一开始,相信很多人都以为myThread中的run()方法会在一个新的线程中运行,但事实并非如此。以下代码中的handler并没有调用线程myThread的start()方法,而是直接调用了run()方法,这也就意味着实际上并没有创建一个新的线程,只是在当前线程中调用run()方法而已
    2013-10-10
  • Android Flutter实现创意时钟的示例代码

    Android Flutter实现创意时钟的示例代码

    时钟这个东西很奇妙,总能当做创意实现的入口。这篇文章主要介绍了如何通过Android Flutter实现一个创意时钟,感兴趣的小伙伴可以了解一下
    2023-03-03

最新评论