具有相同id的多个组件如何在android中工作?

时间:2013-07-24 04:43:08

标签: android

我定义了几个布局,其中很少有id是多个定义的。我很困惑它是如何工作的?为什么它不像我们进入java代码那样给出错误?最重要的是,环境如何决定它需要调用哪个组件?

我理解id生成的过程是自动化的,它被添加到R.java中 例如,如果我们有相同的ID,在两个XML中说“image1”,请说“layout1”& “布局2”。但在R.java中它不会有2个ID。这意味着它一次只会引用一个组件。

如果我们必须在Activity中使用2个XML,一个作为activity.setcontentview(layout1),另一个作为PopupWindow.setContentView(layout2)。在这种情况下会发生什么?

可能是它非常基本的问题但是我错过了什么?

3 个答案:

答案 0 :(得分:5)

您可以findViewById设置为活动的当前视图层次结构。在同一视图树中,视图的ID不能相同。 (必须是唯一的)。

从文档引用

任何View对象都可以有一个与之关联的整数ID,以唯一标识树中的View 。编译应用程序时,此ID被引用为整数,但ID通常在布局XML文件中作为字符串在id属性中指定。这是所有View对象(由View类定义)共有的XML属性,您将经常使用它。

http://developer.android.com/guide/topics/ui/declaring-layout.html

实施例

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button myButton = (Button) findViewById(R.id.my_button);
 }

XML

  <Button android:id="@+id/my_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/my_button_text"/>  

下面

  Button myButton = (Button) findViewById(R.id.my_button);

findViewById方法R.id.button是一个int值。会在R.java中有一个自动生成的条目。在当前视图树下的相同xml文件下,您不能拥有具有相同ID的视图。

打开你的R.java不要修改它的内容。 R.java看起来像下面的

  public static final class id {
      public static final int my_button=0x7f080004; // this is the int value which is unique
   }

onCreate R.id.my_button中,您可以引用findViewById()

您可以在不同的xml文件中使用相同的ID,因为每当您使用{{1}}获取对布局的一部分的引用时,该方法仅在当前虚增的布局中查找该视图。 (当前视图树/层次结构)

但是,为了避免混淆,最好使用ID。

答案 1 :(得分:1)

对不同布局中的不同组件使用相同的ID不会导致任何问题。但是你不能在同一个布局中为不同的组件使用相同的id。每次创建一个新的视图时,都会为它分配一个唯一的整数id,可以在R.java文件中找到..但即使我们使用相同的id两个组件,只有一个条目进入R.java文件。但是,它不会导致错误,如果两个组件都在不同的xml布局中,则此方法有效。 [http://developer.android.com/reference/android/view/View.html] [1]

请在此页面中找到ID部分。对不起,如果这不是你想要的

答案 2 :(得分:1)

不同的View实例可以具有相同的ID。在以下情况下可能会出现这种情况:

ID只是您可以用来查找视图的工具。它在大多数情况下几乎是独一无二的,但不能保证。