2012-03-30 118 views
0

我有一个投票的ID(ids.xml),我分配id的动态创建的意见。现在我的问题非常简单 - 假设我创建了一个新视图并为其分配了setId()R.id.uniqueId相结合的ID。稍后,我可以使用findViewById(R.id.uniqueId)访问该视图吗?Android - findViewById()和动态设置ID的

如果是这样,那么返回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 :(

为什么不注册\映射assgined ID给它分配的看法?

+0

你有没有发现你的问题的解决方案?我有与动态添加视图相同的问题。 – Nik 2013-05-22 13:26:29

回答

2

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

一两件事我注意到这是一个从你简单的例子丢失:你需要确保你添加新的LinearLayout的视图层次,你将能够与findViewById找到它之前:

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

你也可以使用hierarchy viewer来查看一切是否正确设置。

+0

感谢您的戒烟答复。线性布局是主要布局,也就是我动态创建和分配的第一个布局。那么,我应该添加哪个父母? – MrRoth 2012-03-30 21:29:45

+0

你会说setContentView(l)。 – 2012-03-30 21:45:14

+0

但这就是我所做的,看到我原来的帖子。 – MrRoth 2012-03-30 21:47:05

0

从您给我们看来,视图永远不会添加到活动视图中。这是必要的,因为findViewById使用活动的视图作为父项来查找具有该Id的子视图。

如果您正在创建视图,您可以随时将其创建为成员变量,并在以后将其添加到视图中时以此方式引用它。请注意,必须在已设置ID后添加视图。

+0

谢谢你的答案。线性布局是主要布局,即我动态创建并分配ID的第一个布局。我如何将它添加到当前正在运行的(''this'')活动中? – MrRoth 2012-03-30 21:34:10