Inflater在Android中的英文意思是“膨胀”,实际上它的作用类似于findViewById(),但有所不同。findViewById()用于查找具体某个xml文件下的widget控件(如Button、TextView等),而Inflater则是用来加载layout文件夹下的xml布局文件并实例化它们。

获取Inflater的方法有三种:

1. 通过静态函数Context context)获取:

```java

static LayoutInflater (Context context);

```

2. 通过服务获取:

3. 调用Activity的()函数获取LayoutInflater对象。

setContentView和inflate的区别在于,setContentView()方法一旦调用,layout就会立刻显示UI;而inflate方法只是将Layout形成一个以view类实现成的对象,需要时再用setContentView(view)显示出来。

通常情况下,我们使用Inflater来完成以下操作之一:

- inflate方法总共有四种形式,目的都是把xml表述的layout转化为View对象。其中比较常用的是View inflate(int resource, ViewGroup root)。resource表示资源/layout文件在R文件中对应的ID,这个必须指定。而ViewGroup root则可以是null,null时就只创建一个resource对应的View,不是null时,会将创建的view自动加为root的child。

例如,下面的代码展示了如何使用Inflater加载一个名为tview的TextView控件:

```xml

android:id="@+id/tview"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

```

以下是重构后的代码:

```java

// 定义布局文件中的控件ID

int textViewId = R.id.tview;

int buttonId = R.id.button;

// 在程序中动态加载布局文件

LayoutInflater flater = LayoutInflater.from(this);

View view = flater.inflate(R.layout.example, null);

// 获取布局中的控件

TextView textView = (TextView) view.findViewById(textViewId);

Button button = (Button) view.findViewById(buttonId);

```

解析:

1. 首先,我们需要在代码中定义布局文件中的控件ID。在这个例子中,我们定义了两个ID:`textViewId` 和 `buttonId`,分别对应布局文件中的 `TextView` 和 `Button` 控件。

2. 接下来,我们使用 `LayoutInflater` 的 `inflate` 方法将布局文件转换为一个 `View` 对象。这个方法接受两个参数:布局文件的资源ID和一个可选的容器视图。在这个例子中,我们将布局文件的资源ID设置为 `R.layout.example`,并将容器视图设置为 `null`。

3. 然后,我们使用 `findViewById` 方法从 `View` 对象中获取布局文件中的控件。这个方法接受一个控件ID作为参数,并返回对应的控件对象。在这个例子中,我们分别获取了 `TextView` 和 `Button` 控件。