【问题标题】:The difference between LayoutInflater.inflate and findViewByIdLayoutInflater.inflate 和 findViewById 的区别
【发布时间】:2015-01-18 21:33:15
【问题描述】:

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

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

和:

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

TableRow 是其布局的根还是只是布局的一小部分,是否也有区别?

【问题讨论】:

    标签: android android-widget layout-inflater findviewbyid


    【解决方案1】:

    有什么区别...

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

    第二个是读取 XML 文件并创建 new 小部件。第二个也有点问题,因为您很少想使用LayoutInflater.from()(您通常在Activity 上使用getLayoutInflater()),并且您很少想使用inflate() 变体(如果您不提供父容器,带有根 RelativeLayout 元素的布局资源会出现异常)。

    TableRow 是其布局的根还是只是布局的一小部分,是否也有区别?

    是的。区别与以前相同:检索现有小部件或创建新小部件。

    【讨论】:

      【解决方案2】:

      1) 使用

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

      只是获得了一个参考到一个View id R.id.table_row 已经在当前布局中创建和膨胀(其中 current 表示Activtiy 的布局或您正在定义的View

      2)使用

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多