在扩充XML后,android如何使用R.id.id_name
查找视图?
1.假设我有两个XML,一个按钮,每个都有相同的ID。
2.我已将它们充气并将其转换为视图
3.在R.id类中,只为这两个按钮创建一个int
。
android如何区分具有相同id的这些按钮使用相同的资源名称(R.id.id_name)。
答案 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}}。