膨胀vs findViewById

时间:2010-03-30 04:40:53

标签: android

假设我有一个简单的布局xml,如下所示:

button.xml:

<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

以下来电有什么不同吗?我应该使用哪一个?

button = (Button) getLayoutInflater().inflate(R.layout.button, null);

View v = getLayoutInflater().inflate(R.layout.button, null);
button = (Button) v.findViewById(R.id.button01);

2 个答案:

答案 0 :(得分:14)

这个创建一个具有给定布局的新视图,其中'R.layout.button'是由xml文件'button.xml'的名称生成的。每次调用.inflate(...),都会得到一个新实例。

View v = getLayoutInflater().inflate(R.layout.button, null);

-

当一个人在布局中找到一个现有的视图,其中R.id.button01是由id名称'android:id =“@ + id / button01”'生成的。每次调用.findViewById(R.id.button01)时,您将获得相同的实例,因为视图'v'将是相同的。

button = (Button) v.findViewById(R.id.button01);

答案 1 :(得分:0)

第一种选择更清洁,效率更高。

您的布局inflater将返回Button。使用第一个选项,您可以直接访问Button。使用第二个选项,您将按钮向下转换为View,然后查找具有给定ID的视图,这是一个额外无用的比较,因为具有您在层次结构中查找的ID的视图发生成为按钮本身。所以在第二个选项v == button