R.java-在android中处理重复的View ID

时间:2012-12-14 05:09:41

标签: android

假设我在两个不同的布局中为两个不同的视图使用相同的id,我可以看到在R.java中的类“id”中只为id创建了一个引用。实际上我认为它应该在构建时在类“id”中添加具有相同名称的常量时显示错误。为什么它没有显示错误?。它如何识别具有单个id的两个不同视图?

3 个答案:

答案 0 :(得分:5)

如果你有两个不同的人,两个人都叫Vicky,那么在调用名字(= id)时这个人是谁并不重要。如果你在第一组中称为'Vicky',则该组中的Vicky会做出响应。 在Android中,您可以使用setContentView(<layout file>)<layout file>分配一组“视图”,其中<View id="@+id/name1"/> <View id="@+id/name2"/> <View id="@+id/name3"/> 是该组。 如果您通过findViewWithId()请求具有不可用的id的视图(如在,不在加载的布局文件中),则返回null。

示例:

layout1.xml包含

<View id="@+id/name1"/>
<View id="@+id/name3"/>

layout2.xml包含

findViewById(R.id.name1)

在第一个和第二个布局文件上调用findViewById(R.id.name2)将返回第一个视图。但是当您在第二个布局上调用null时,它将返回{{1}}。 id DOES存在于A布局文件中,但不在“已加载”布局文件中。

Id不是对View对象的引用。它们是可由不同布局中的多个视图使用的标识符。通过在布局文件中查找标识符,您可以使用它获取对视图的引用。

答案 1 :(得分:1)

您可以在不在同一文件中的不同ids文件中为视图xml使用相同的字符串名称。这就是编译器如何区分不同布局中的不同视图

答案 2 :(得分:0)

如果您对两个不同的视图使用相同的字符串,它将只生成一个id,它将是相同的。这是一个在RelativeLayouts中非常有用的功能,例如,因为你可以多次使用@ + id并知道它将引用相同的id - 视图本身需要具有唯一ID,但是id可能被引用布局语句。

这是它的设计方式,而不是错误。