Android - findViewById()并动态设置ID

时间:2012-03-30 21:16:56

标签: java android android-layout android-view

我对ID(ids.xml)进行了调查,并为动态创建的视图分配了id。现在我的问题非常简单 - 假设我创建了一个新视图,并将setId()R.id.uniqueId结合使用。稍后,我可以使用findViewById(R.id.uniqueId)访问该视图吗?

如果是这样,它返回null的原因是什么?

以下是一个玩具示例:更新

LinearLayout l = new LinearLayout(this);
l.setId(R.id.mId);
setContentView(l); //i see on screen the views added to 'l'
l = (LinearLayout) findViewById(R.id.mId); //it returns null :(

为什么不注册\将已分配的ID映射到它所分配的视图?

3 个答案:

答案 0 :(得分:2)

您所需的视图是否具有可用于调用parent.findViewById的父视图?这可能有助于缩小您的问题范围。

我注意到您的简短示例中遗漏了一件事:您需要确保在将新的LinearLayout添加到视图层次结构中之后才能使用findViewById找到它:

findViewById(R.id.parent).addView(l)

您还可以使用hierarchy viewer查看是否正确设置了所有内容。

答案 1 :(得分:1)

多次遇到这种情况,尝试通过干净来清理项目,同时检查findViewById() returns null for custom component in layout XML, not for other components

答案 2 :(得分:0)

根据您提供给我们的信息,该视图似乎永远不会添加到活动视图中。这是必要的,因为findViewById使用活动的视图作为父级来查找具有该Id的子视图。

如果要创建视图,则始终可以将其创建为成员变量,如果要在以后将其添加到视图中,请以此方式引用它。请注意,必须在设置ID后添加视图。