为什么LayoutInflater.inflate返回作为参数传递的根?

时间:2017-01-05 18:02:08

标签: android android-layout

我尝试在代码中将视图扩展到容器中,同时获取对我的膨胀视图(按钮)的引用。所以代码是这样的:

Button mybut = (Button) getLayoutInflater().inflate(resID, lyMain, true);

但这不起作用:返回的结果不是我的预期。在https://developer.android.com/reference/android/view/LayoutInflater.html阅读文档,我发现:

(inflate...returns)... The root View of the inflated hierarchy. If root was supplied and attachToRoot is true, this is root; otherwise it is the root of the inflated XML file.

现在这个愚蠢的问题:为什么这个方法应该返回我已经知道的东西(当我传递一个root并且“true”附加到它时)?我更需要引用刚刚膨胀的View,而不是我传递给方法的root /容器。

2 个答案:

答案 0 :(得分:1)

确实很奇怪。但是,执行以下操作将得到完全相同的结果,但实际上会捕获膨胀的布局:

Button mybut = (Button) getLayoutInflater().inflate(resID, lyMain, false);
lyMain.addView(mybut);

所以它确实需要一行额外的代码,但与我不得不拨打findViewByIdgetView(index)相比,这似乎给我带来了轻微的不便。

文档很好地解释了差异,但我想你已经读过:

  

root:可选视图是生成的层次结构的父级(如果attachToRoot为true),或者只是一个为返回的层次结构的根提供一组LayoutParams值的对象(如果attachToRoot为false。)

答案 1 :(得分:0)

我认为这种设计选择的原因是你的布局资源可能没有root本身

ImageView/TextView/ImageButton/...布局就是这种情况,例如

<merge>

这可以在父ViewGroup中膨胀,但不能用单个View实例表示为整体。返回父ViewGroup似乎是唯一的选择。