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

Ank*_*kit 2 android

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

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

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

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

Rag*_*dan 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);
 }
Run Code Online (Sandbox Code Playgroud)

XML

  <Button android:id="@+id/my_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/my_button_text"/>  
Run Code Online (Sandbox Code Playgroud)

这里

  Button myButton = (Button) findViewById(R.id.my_button);
Run Code Online (Sandbox Code Playgroud)

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
   }
Run Code Online (Sandbox Code Playgroud)

onCreate你的推荐中R.id.my_button.

您可以在不同的xml文件中使用相同的ID,因为无论何时findViewById()用于获取对布局的一部分的引用,该方法仅在当前膨胀的布局中查找该视图.(当前视图树/层次结构).

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