2011-11-17 55 views
0

我在我的Android項目問題試圖使一個選項菜單。的Android MenuItem.getItemId返回整數值

當我調試/執行我的應用程序並點擊菜單按鈕時,ALWAYS R.id.btnInfo屬性返回一個整數,而不是菜單項ID(btnInfo)。

下面是代碼:

菜單聲明:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/btnInfo" 
     android:title="@string/btnInfo" 
     android:icon="@drawable/ic_info" /> 
</menu> 

加載菜單:

/** 
* Options Menu Inflater Event 
*/ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options, menu); 
    return true; 
} 

Click事件:

/** 
* Click on Options Menu Button 
*/ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.btnInfo: 
    // To-do: 
    return true; 
    default: 
    return super.onOptionsItemSelected(item); 
    } 
} 

回答

2

這是正確的行爲。

檢查R.java文件,對於每一個你給一個ID項目,它生成一個整數ID來指代了。

實施例:

public static final class menu { 
    public static final int option1=0x7f0a0000; 
    public static final int option2=0x7f0a0001; 
    public static final int option3=0x7f0a0002; 
} 
+0

所以....如果這是我的R.java: 公共靜態最終類ID { 公共靜態最終詮釋btnInfo = 0x7f060007; public static final int btnSimulate = 0x7f060003; 正確的代碼將是: /** * 點擊選項菜單按鈕, */ ... 開關(item.getItemId()){ 情況:0x7f060007 //待辦事項: ... ??? 是......真的很奇怪。我想,I'm有點糊塗的xD 我所要做的使用情況:情況R.id.btnInfo和BUTTOM的標識? Thx !! – unairoldan

+0

您的代碼已經正確。 'case R.id.btnInfo',表示如果你的btnInfo被按下,運行那段代碼。你的代碼很好! – Ricky

+0

當您添加/刪除ID時,生成的數字將會改變,因此從生成的變量(R.xxx.xxxx)中引用它 - 您在問題中發佈的代碼是正確的 – FunkTheMonk