我尝试在代码中将视图扩展到容器中,同时获取对我的膨胀视图(按钮)的引用。所以代码是这样的:
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 /容器。
答案 0 :(得分:1)
确实很奇怪。但是,执行以下操作将得到完全相同的结果,但实际上会捕获膨胀的布局:
Button mybut = (Button) getLayoutInflater().inflate(resID, lyMain, false);
lyMain.addView(mybut);
所以它确实需要一行额外的代码,但与我不得不拨打findViewById
或getView(index)
相比,这似乎给我带来了轻微的不便。
文档很好地解释了差异,但我想你已经读过:
root:可选视图是生成的层次结构的父级(如果attachToRoot为true),或者只是一个为返回的层次结构的根提供一组LayoutParams值的对象(如果attachToRoot为false。)
答案 1 :(得分:0)
我认为这种设计选择的原因是你的布局资源可能没有root本身。
ImageView/TextView/ImageButton/...
布局就是这种情况,例如
<merge>
这可以在父ViewGroup中膨胀,但不能用单个View实例表示为整体。返回父ViewGroup似乎是唯一的选择。