Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發中@+id/和android:id用法的區別?

android開發中@+id/和android:id用法的區別?

編輯:關於Android編程

今天在學習的過程中遇到了如標題的問題:@+id/和android:id用法的區別?

首先看代碼:



        
        
上述在代碼中,模擬器運行會發現出現異常:java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list.

接下來看Activity中代碼:

public class ListViewActivity extends ListActivity {
	@Overrided
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
                //如果使用了以下的layout文件則需要在此文件中假如ListView,
                  而且id一定為 @android:id/list   
                //否則會報 Your content must have a ListView whose id attribute is 'android.R.id.list"
                  錯誤  
                //固定用法。如果沒有設置下面的layout,則自動使用默認的layout,不需定義listview  
                setContentView(R.layout.listview);
    }
}


注意這裡繼承的是ListActivity,不是原來的Activity。
ListActivity是一個綁定到一個數據源,並且用來顯示這一串數據的Activity。
ListActivity擁有一個listview對象來實現數據源的綁定與顯示,
通常會是一個array或者一個擁有查詢結果的cursor
ListActivity本身有一個默認的layout,其中包含一個全屏的list。
如果用默認的layout,你必須要在onCreate()中注釋掉setContentView()那一句。
但是如果你如果你想要定制自己的layout你可以創建一個你自己的layout文件,並且在onCreate()中調用
setContenttView()來指定這個layout.,
需要注意的是你自己的layout中必須要有一個id為"@android:id/list"的ListView,如上面的XML代碼。
正確的代碼:修改android:id="@id/android:list" ------修改----->android:id="@android:id/list",這樣模擬器就能運行起來。


下面通過查詢Android API文檔資料進行關於android:id="@../.."x相關用法說明記錄如下:
在Android系統中的組件需要用一個int類型的值來表示,這個值也就是組件標簽中的id屬性值。id屬性只接受資源類型的值,也就是必須以@開頭的值,例如,@id/result、@+id/user等。如果在@後面使用“+”,表示當修改完某個布局文件並保存後,系統會自動在R.java文件中生成相應的int類型變量。變量名就是“/”後面的值,例如,@+id/user會在R.java文件中生成int user = value(value是一個十六進制的數,例如在R.java中的public static final int user=0x7f030003;)。

如果user在R.java中已經存在同名的變量,就不再生成新的變量,而該組件會使用這個已存在的變量的值。
如果使用@+id/name形式,當R.java中存在名為name變量時,則該組件會使用該變量的值作為標識。如果不存在該變量,則添加一個新的變量,並為該變量賦相應的值(不會重復)。
在Android系統中既然組件的id屬性是一個資源id就可以,那麼自然可以設置任何已經存在的資源id值,例如,@drawable/icon、@string/ok、@+string/you等。當然,也可以設置android系統中已存在的資源id,例如,我所遇到的@id/android:list,那麼這個android是什麼意思呢,實際上,這個android就是系統的R類(在R.java文件中)所在的package。

由於是初學者關於說明@+id/和android:id寫法的區別概述也許不是很准確到位,但這僅是記錄個人學習的過程。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved