两个具有相同ID的视图

时间:2013-02-07 19:11:08

标签: android

在扩充XML后,android如何使用R.id.id_name查找视图?

1.假设我有两个XML,一个按钮,每个都有相同的ID。

2.我已将它们充气并将其转换为视图

3.在R.id类中,只为这两个按钮创建一个int

android如何区分具有相同id的这些按钮使用相同的资源名称(R.id.id_name)。

3 个答案:

答案 0 :(得分:31)

ID不是唯一的参考。

但是,实际上,您可以使用父视图进行区分。

如果我们认为'this'是一个Activity,使用包含按钮的布局进行设置,那么:

Button button = (Button) this.findViewById( R.id.id_name );

将返回它在布局中找到的第一个(我认为 - 不确定实际行为是否已定义)。

但是,您可能会在某个父视图上调用findViewById,该视图只包含一个具有该ID的实例。

LinearLayout okParent = (LinearLayout) this.findViewById( R.id.okLayout );
LinearLayout cancelParent = (LinearLayout) this.findViewById( R.id.cancelLayout );

Button okButton = (Button) okParent.findViewById( R.id.id_name );
Button cancelButton = (Button) cancelParent.findViewById( R.id.id_name );

从概念上讲,这是一种基于路径的查找。你应该小心设计你的布局,以便这样做。

答案 1 :(得分:12)

Android采取简单的方法: ID不是应用程序范围内唯一的,但布局范围唯一。

R.id.foo的值在两个不同的布局中相同,其中包含foo id的控件。因为他们没有竞争独特性,所以没关系。

答案 2 :(得分:6)

它知道它应该使用哪个View,因为它在当前设置为内容视图(或被夸大)的XML文件中查找具有此特定View的{​​{1}}。