android 中Xml裡面的id重名問題

來源:互聯網
上載者:User

android 中Xml裡面的id重名問題

聲明:轉載請註明原作地址。


今天在做項目的時候,居然發現@+id 居然可以重名,而且程式還不會報錯。鬱悶了,這到底怎麼回事呢?經過google 和百度之後,才有所瞭解。

情況一:同個一個Xml檔案中的同名

在同個一個Xml檔案的中若同名了,則前一個有效,而後一個無效,即後一個Null掉。如:

    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/textView1"        android:layout_alignRight="@+id/textView1"        android:layout_marginBottom="58dp"        android:layout_marginRight="18dp"        android:text="Button1" />    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignRight="@+id/button"        android:layout_centerVertical="true"        android:text="Button2" />

前一個Button有效(即 android:text="Button1" ),後一個無效。

情況二:在不同的Xml 檔案中的同名

在同個一個Xml檔案的中若同名了,兩者都有效。

當android的工程越來越大。xml檔案越來越多時,避免不了兩個xml檔案中同樣的組件使用同樣的id名字,gen目錄下的R.java檔案中,有關id的聲明都在id的class中,即public static final class id{};當兩個xml檔案中同樣的組件,比如Button,有可能很多個檔案中,都有id=”@+id/Button”,開始以為在Java類中引用會重複的id造成程式的不識別。

後來偶然一次錯誤發現,只需你setContentView(R.layout.updatemyaddressbook);中的xml檔案以及這個xml檔案相關的xml檔案中的id不重複,在類中使用findViewById(R.id.Button);時,程式是不會不識別的。

這個問題非常地容易理解:因為在Android的架構設計中,每一個控制項都隸屬於一棵控制項樹,每個控制項都被其父控制項所管理與調配,而根控制項是一個容器控制項,所有的子控制項都是構造在這個根控制項之上,這樣並形成了一個控制項樹的控制項域,在這個控制項域中是不允許重名的,超出了這個控制項域則這些控制項的ID是無效的,也就是說在容器控制項中的子控制項是不允許重名的,而不在同一容器控制項中的兩個控制項重名也無所謂。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.