9
  • 我总是对为什么我们需要在 android 中使用 inflater 模棱两可,为什么它们在 ListView 中用于自定义布局(如下所示)?
  • 什么是充气机?
  • 使用 Inflater 有什么好处?

public class MobileArrayAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;


public MobileArrayAdapter(Context context, String[] values) {
    super(context, R.layout.list_mobile, values);
    this.context = context;
    this.values = values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.list_mobile, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
    textView.setText(values[position]);

谢谢,

4

3 回答 3

23

什么是充气机?

总结一下LayoutInflater 文档所说的内容... ALayoutInflater是 Android 系统服务之一,它负责获取定义布局的 XML 文件,并将它们转换为View对象。操作系统然后使用这些视图对象来绘制屏幕。

我一直对为什么我们需要在 android 中使用 inflater 有歧义,为什么它们在 android ListView 中用于自定义布局?

通常,您不需要直接使用 LayoutInflater。当您调用Activity setContentView()的方法时,Android 会为您完成大部分布局膨胀。因此,作为程序员,您有责任确保视图被夸大。现在您想在 ListView 的上下文中扩展视图。如果您不想自定义每个项目,Adapter 类可以为您完成膨胀。但是,如果您想自定义列表中显示的视图,则必须使用 LayoutInflater 手动填充每个视图,因为您无法使用其他现有方法。onCreate()

使用 Inflater 有什么好处?

使用它没有任何优势。您需要使用某种形状或形式的 LayoutInflater 来扩充您的静态 XML 布局。

或者,您可以使用 java 代码动态创建视图。但是,您需要调用方法来手动设置视图的每个属性。在我看来,使用 XML/inflation 过程更容易。此外,Android 会在构建时对您的 XML 文件进行预处理,从而加快执行时间。

于 2013-08-02T17:41:04.687 回答
3

我总是对为什么我们需要在 android 中使用 inflater 有歧义,为什么它们在 android ListView 中用于自定义布局?
它们用于为每一行创建视图。

什么是充气机?
从 XML 布局创建视图的系统服务。

在下面的代码中,我试图理解为什么使用 Inflator?
充气器用于为行创建视图。

使用 Inflater 有什么好处?
相比什么?您想如何从 XML 布局中创建视图?

于 2013-08-02T17:32:30.540 回答
0

简而言之,inflater 允许您从资源布局文件创建视图,因此您无需以编程方式创建所有内容。

在您的示例中,您膨胀了 layout R.layout.list_mobile。这使您可以访问其中的所有视图。例如,您随后调用:

TextView textView = (TextView) rowView.findViewById(R.id.label);

通过调用rowView.findViewById(),您可以访问在该布局中创建的视图。通常对于 ListViews,您将拥有一个行 XML 文件,然后您将其膨胀并将数据放入视图中。

于 2013-08-02T17:33:17.457 回答