2012-06-04 51 views
0

这是针对setId()方法给出的说明。Android中的setId()方法混乱

void android.view.View.setId(int id) 

公共无效SETID(INT ID)

自:API级别1

设置此视图标识符。在该视图的层次结构中,标识符不必是 唯一。标识符应为正数 。

我的问题是,为什么在这个视图的层次结构中标识符不必是唯一的,尽管我们在XML文件中分配了唯一的id?

+0

嘿,感谢您的编辑。现在它看起来不错:) – Rookie

+0

你是welocme – Blackbelt

回答

4

我的问题是,为什么在这个视图的层次结构中标识符不必是唯一的,尽管我们在xml文件中分配了unigue id ..?

android:id在XML文件中也不必是唯一的,不过这通常是您编写它的方式。

要理解为什么小部件ID不必是唯一的,请考虑ListView。假设我们有一个有8行的ListView。这些行中的每一行都是通过扩展布局XML资源来创建的(例如,android.R.layout.simple_list_item_1)。每个膨胀的行都是ListView的孩子。然而,由于每一行都是从相同的布局资源中膨胀的,所以每行的小部件与其他所有行都具有相同的ID。

这通常不是问题。这确实导致了Android开发的一个主要规则:总是会调用findViewById(),这会为您寻找的小部件带来独特的结果。在这种情况下,我不想在ListViewActivity上调用findViewById()在其中一行内部找到一个小部件,因为将有8个小部件都具有相同的ID,并且我不知道哪一行的小部件将会回来。相反,我需要在上调用findViewById(),以从该特定行获取特定的窗口小部件。

2

ID不需要是唯一的,你可以使用任何你喜欢的正整数,但在这种情况下,可以有一些具有相同ID的视图。

另外喜欢罗曼盖伊所述this交:

findViewById()深度优先搜索算法;它会返回它可以找到的指定ID的第一个视图。