Android View id 必须是唯一的吗?

Posted

技术标签:

【中文标题】Android View id 必须是唯一的吗?【英文标题】:Must an Android View id be unique? 【发布时间】:2014-03-09 11:58:07 【问题描述】:

这个问题基于并扩展了之前关于同一主题的问题。

我特别参考了“android Programming Big Nerd...”的第 203 页。这本有吸引力且有用的书在该页面的大部分内容中都解释了您必须使用 XML 作为 id。

事实上似乎并非如此。作为在整本书的特殊章节中提到的“更好奇”的人之一(尽管不是关于这个主题),我发现你必须有一个 id,但是 1、37、42、99,我希望还有很多其他人会这样做以及推荐的 R 确保唯一。

我对 ViewPager 主题的复杂性(以及它仅在支持库中......)感到非常困惑,并且应该欢迎关于简单视图 id 案例的权威声明。

我在这里提出这个问题,因为 Big Nerd 论坛似乎有点奄奄一息,我敢说 Bill 和 Brian 不时来这里。

【问题讨论】:

你应该阅读***的常见问题 我们都应该如此,我亲爱的伙伴。非常感谢? 【参考方案1】:

不,它不需要是唯一的,但最好尝试在单个 xml 文件中保留唯一名称,否则 findViewById 会遇到问题

a_layout.xml

<View android:id="@+id/name" .../>
<View android:id="@+id/name" .../>

findViewById 不知道你想要第一个还是第二个。但如果它们在不同的文件中

a_layout.xml

<View android:id="@+id/name" .../>

b_layout.xml

<View android:id="@+id/name" .../>

没有冲突,项目范围内的重复是可以的,但可能会在同一个 xml 中导致问题

【讨论】:

【参考方案2】:

不,即使在同一布局中,id 也不必是唯一的。

但是,像 findViewById() 这样的函数的行为并没有针对冲突的 id 进行定义,也没有定义布局行为,因此最好保持它们的唯一性。

【讨论】:

【参考方案3】:

对于相同类型的视图,您应该有唯一的 ID。但是对于不同类型的视图,你可以有相同的 id 。 E.X.

<TextView android:id="@+id/name1" .../>
<TextView android:id="@+id/name2" .../>

上面应该有唯一的ID。

<EditText android:id="@+id/name" .../>
<TextView android:id="@+id/name" .../>

但是对于这种情况,你可以拥有相同的 ID。

【讨论】:

以上是关于Android View id 必须是唯一的吗?的主要内容,如果未能解决你的问题,请参考以下文章

聚集索引必须是唯一的吗?

使用哈希作为唯一 ID 是错误的吗?

外键是唯一的吗?

query_id 在所有 Snowflake 帐户中是唯一的吗?

Qt ObjectName()必须是唯一的吗?

django csrf 令牌在每个请求上都必须是唯一的吗?