LayoutInflater.inflate 和 findViewById 的区别
The difference between LayoutInflater.inflate and findViewById
像这样获取对小部件的引用有什么区别:
TableRow row = findViewById(R.id.table_row);
和:
TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null);
当 TableRow
是其布局的根或者它只是布局的一小部分时,是否也有区别?
What is the difference...
第一个是检索 activity 中的现有小部件。
第二个正在读取 XML 文件并正在创建 new 小部件。第二个也有点问题,因为你很少想使用 LayoutInflater.from()
(你通常在 Activity
上使用 getLayoutInflater()
),而且你很少想使用 inflate()
变体(如果您不提供父容器,具有根 RelativeLayout
元素的布局资源将出现异常)。
Is there also a difference when the TableRow is a root of its layout or if its just a small part of a layout?
是的。不同之处与以前相同:检索现有小部件或创建新小部件。
1) 使用
TableRow row = findViewById(R.id.table_row);
您只是获取对已创建的 ID 为 R.id.table_row 的 View
的引用并在当前布局中膨胀(其中 current 表示 Activtiy
的布局或您正在定义的 View
。
2) 使用
TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null);
您正在 膨胀(这意味着创建)基于 R.layout.table_row[= 中包含的 XML 定义的新视图层次结构33=]。由于您没有在 inflate() 方法中传递父视图参数,因此您需要将生成的层次结构手动添加到现有容器中。
像这样获取对小部件的引用有什么区别:
TableRow row = findViewById(R.id.table_row);
和:
TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null);
当 TableRow
是其布局的根或者它只是布局的一小部分时,是否也有区别?
What is the difference...
第一个是检索 activity 中的现有小部件。
第二个正在读取 XML 文件并正在创建 new 小部件。第二个也有点问题,因为你很少想使用 LayoutInflater.from()
(你通常在 Activity
上使用 getLayoutInflater()
),而且你很少想使用 inflate()
变体(如果您不提供父容器,具有根 RelativeLayout
元素的布局资源将出现异常)。
Is there also a difference when the TableRow is a root of its layout or if its just a small part of a layout?
是的。不同之处与以前相同:检索现有小部件或创建新小部件。
1) 使用
TableRow row = findViewById(R.id.table_row);
您只是获取对已创建的 ID 为 R.id.table_row 的 View
的引用并在当前布局中膨胀(其中 current 表示 Activtiy
的布局或您正在定义的 View
。
2) 使用
TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null);
您正在 膨胀(这意味着创建)基于 R.layout.table_row[= 中包含的 XML 定义的新视图层次结构33=]。由于您没有在 inflate() 方法中传递父视图参数,因此您需要将生成的层次结构手动添加到现有容器中。