LayoutInflater.inflate和findViewById之间的区别

时间:2015-01-18 21:33:15

标签: android android-widget layout-inflater findviewbyid

获取像这样的小部件的引用有什么区别:

TableRow row = findViewById(R.id.table_row);

TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null);

TableRow是其布局的根或它只是布局的一小部分时,是否也存在差异?

2 个答案:

答案 0 :(得分:3)

  

有什么区别......

第一个是检索活动中的现有小部件。

第二个是读取XML文件并正在创建 new 小部件。第二个也有些错误,因为你不经常想要使用LayoutInflater.from()(通常在你的getLayoutInflater()上使用Activity),而你很少想要使用inflate()变量(如果您不提供父容器,则具有根RelativeLayout元素的布局资源将出现异常)。

  

当TableRow是其布局的根目录还是只是布局的一小部分时,是否存在差异?

是。差异与以前相同:检索现有小部件或创建新小部件。

答案 1 :(得分:3)

1)使用

TableRow row = findViewById(R.id.table_row);

只是简单地获取{id> R.id.table_row View的参考,该参考已在当前布局中创建并膨胀(其中) 当前表示Activtiy的布局或您定义的View

2)使用

TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null);

膨胀(这意味着创建)基于 R.layout.table_row 中包含的XML定义的新视图层次结构。由于您未在 inflate()方法中传递父View参数,因此您需要手动将结果层次结构添加到现有容器中。