`
yxwang0615
  • 浏览: 561320 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

LayoutInflater 类的使用

 
阅读更多

一个Activity里如果直接用findViewById(),对应的是setConentView()的那个layout里的组件,因此如果你的

 Activity里如果用到别的layout,你就必须用inflate()先将对话框上的layout找出来,然后再用这个layout对

象去找到它上面的组件,

 

 

 

public View inflate(Context context, int Resourece,ViewGroup root)
  作用:填充一个新的视图层次结构从指定的XML资源文件中
  context : The Context object for your activity or application
  reSource:View的layout的ID
  root: 生成的层次结构的根视图
  return 填充的层次结构的根视图。如果参数root提供了,那么root就是根视图;否则填充的XML文件的根就是根视图。
 

 

 

  View view = View.inflate(this, R.layout.dialog_layout, null);

  TextView dialogTV = (TextView) view.findViewById(R.id.dialog_tv);

  dialogTV.setText("abcd");

 

  setContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象,

 

 

  有需要时再用setContentView(view)显示出来。一般在activity中通过setContentView()将界面显示出来,

  然后才能使用findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)

  但是如果在非activity中如何对控件布局设置操作了,这就需要LayoutInflater动态加载。

  LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化。

 

 

 

LayoutInflater inflater = LayoutInflater.from(this);     
View view=inflater.inflate(R.layout.ID, null);    
//或者干脆并成一句:    
View view=LayoutInflater.from(this).inflate(R.layout.ID, null); 

 

或者:

 

 

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);    
View view=inflater.inflate(R.layout.ID, null); 

 


android.view.View类中也有一个inflater方法:

 

 

public static View inflate (Context context, int resource, ViewGroup root)


Inflate a view from an XML resource. This convenience method wraps the LayoutInflater class, which provides a full range of options for view inflation.
Parameters

context	The Context object for your activity or application.
resource	The resource ID to inflate
root	A view group that will be the parent. Used to properly inflate the layout_* parameters.
 

该方法和LayoutInflater中的inflater方法区别不明,查api也没看明白:

 

 

public View inflate (int resource, ViewGroup root)
Inflate a new view hierarchy from the specified xml resource. Throws InflateException if there is an error.

Parameters

resource	ID for an XML layout resource to load (e.g., R.layout.main_page)
root	Optional view to be the parent of the generated hierarchy.

Returns
The root View of the inflated hierarchy. If root was supplied, this is the root View; otherwise it is the root of the inflated XML file.
 

一般在adapter的getview方法中使用View.inflate的比较多,最近在研究自定义下拉刷新listview的时候,使用了View.inflate一直报如下错误:

 

        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		mRefreshView = (RelativeLayout) mInflater.inflate(R.layout.pull_to_refresh_header, this, false);
        //mRefreshView = (RelativeLayout)View.inflate(context, R.layout.pull_to_refresh_header, null);
 

 

 

android.view.InflateException: Binary XML file line #10: Error inflating class com.markupartist.android.widget.PullToRefreshListView
 

而使用 LayoutInflater 就没事,原因翻阅很多资料都没弄明白,看样子定义控件的inflate还是使用

LayoutInflater 吧!

分享到:
评论

相关推荐

    Android 中级应用 一 LayoutInflater 的使用

    在Android开发中,`LayoutInflater`是一个至关重要的工具类,它主要负责将XML布局文件转换成View对象并添加到视图层次结构中。`LayoutInflater`的名字来源于"Layout Inflater",正如描述中提到的,它是对当前...

    layoutinflater中嵌套layoutinflater

    在Android开发中,`LayoutInflater` 是一个至关重要的工具类,用于将XML布局文件转换为视图对象并添加到视图层次结构中。标题提到的"layoutinflater中嵌套layoutinflater"涉及到的是在一个布局中使用`LayoutInflater...

    android中LayoutInflater的使用.pdf

    在Android开发中,`LayoutInflater`是一个非常关键的工具类,主要用于将XML布局文件转换为视图对象(View)。它的核心作用在于动态加载和实例化UI布局,使得开发者可以在运行时根据需要创建和修改用户界面。在本文中...

    LayoutInflater源码分析 inflate方法的区别

    在Android开发中,`LayoutInflater`是一个至关重要的工具类,它负责将XML布局文件转换为视图对象并添加到视图层次结构中。本篇文章将深入探讨`LayoutInflater`的`inflate`方法之间的区别,帮助开发者更好地理解和...

    Android LayoutInflater的用法

    在Android开发中,`LayoutInflater`是一个非常重要的工具类,它主要用于将XML布局文件转换为视图对象,使得我们可以动态地将界面元素添加到应用程序中。`LayoutInflater`是Android框架的一部分,它极大地增强了UI...

    Android LayoutInflater.Factory主题切换

    `LayoutInflater`是负责将XML布局文件转换为视图对象(View)的关键类。它从资源文件中读取布局描述,并根据描述创建对应的View实例。通过`LayoutInflater`,我们可以自定义布局的加载过程,比如在创建View时添加...

    LayoutInflater的使用

    在Android开发中,`LayoutInflater`是一个非常重要的工具类,它主要负责将XML布局文件转换为视图对象(View)并添加到视图层次结构中。`LayoutInflater`的使用是构建用户界面的一个关键步骤,尤其在处理动态加载或者...

    Android LayoutInflater深入分析及应用

    arser.START_TAG && type != XmlPullParser.END_DOCUMENT) { // Do nothing } if (type != XmlPullParser.START_TAG) { throw new InflateException(parser.getPositionDescription() + ": No start tag found!...

    Android LayoutInflater加载布局详解及实例代码

    在Android应用开发中,我们通常使用LayoutInflater来动态地加载和插入布局,这在创建自定义视图、处理动态数据或者在运行时创建视图时非常有用。本文将深入解析LayoutInflater的工作原理,并提供实例代码来帮助理解...

    LayoutInflater.from(context).inflate()方法的调研

    首先,`LayoutInflater`是Android提供的一个类,它的主要任务是将XML布局文件解析成对应的View或ViewGroup对象。`from(context)`是`LayoutInflater`的一个静态工厂方法,它接收一个`Context`对象作为参数,返回一个`...

    Android开发中LayoutInflater用法详解

    在本文中,我们将深入探讨LayoutInflater的工作原理、使用方法以及如何获取其实例。 首先,LayoutInflater的作用在于将XML布局资源解析并转换为Android视图对象(View或ViewGroup)。与`findViewById()`不同,`...

    Android布局加载之LayoutInflater示例详解

    下面我们将详细介绍 LayoutInflater 的使用方法和原理。 一、LayoutInflater 的获取 LayoutInflater 的实例可以通过多种方式获取,但最终都是通过 Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) 来...

    LayoutInflater inflate例子

    `LayoutInflater` 是一个工厂类,它从XML布局文件中创建View对象。通常,我们会在Activity或Fragment的`onCreate()` 或`onCreateView()` 方法中初始化`LayoutInflater` ,并通过`getLayoutInflater()` 或`...

    AsyncTask、JSONAdapter、LayoutInflater的实例

    比如,你可以在后台使用AsyncTask进行网络请求,获取JSON数据,然后通过JSONAdapter解析数据为Java对象,最后使用LayoutInflater将这些数据动态加载到界面上。这样的设计模式在实际开发中非常常见,能够有效地提升...

    Android开发之获取LayoutInflater对象的方法总结

    通过以上分析,我们可以看出,获取`LayoutInflater`对象的主要途径是通过`Context`的服务机制,无论是在`Activity`还是自定义组件中,都可以方便地使用`LayoutInflater`来动态地创建和插入布局。理解并熟练掌握这些...

    Android 中LayoutInflater.inflate()方法的介绍

    该方法是LayoutInflater类中的一个成员方法,主要用于将XML布局文件转换成View对象,以便在Android应用程序中使用。 LayoutInflater.inflate()方法的基本用法 LayoutInflater对象的实例可以通过LayoutInflater.from...

    Android中LayoutInflater.inflater()的正确打开方式

    LayoutInflater是Android中用于加载布局文件的核心类,通过LayoutInflater的inflate()方法可以将布局文件加载到内存中,并返回对应的View对象。但是,很多开发者对LayoutInflater的使用并不了解,今天我们就来探讨...

    商城类APP的商品分类页面实现,使用RecyclerView结合GridLayout减少嵌套

    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_product, parent, false); return new ViewHolder(itemView); } @Override public void onBindViewHolder(ViewHolder ...

    android面试

    针对"Android面试"的主题,下面将详细探讨几个核心知识点,包括接口、抽象类、ListView优化、ViewHolder模式以及LayoutInflater的使用。 1. **接口与抽象类的区别**: - 接口(Interface)是完全公开的,不允许有...

    Android分类列表菜单

    使用LayoutInflater服务,我们可以将这些布局文件转换为View对象,然后在Adapter中使用它们。 最后,将适配器与ListView或RecyclerView关联起来,设置监听器来处理用户的点击事件。例如,当用户点击一个类别时,...

Global site tag (gtag.js) - Google Analytics