2012-07-07 43 views
0

我都盯着我的眼睛紅了這個:ActionBarSherlock和ICS

我使用ABS和一切的Android 2.2下完美的作品,但在ICS item.getItemId()總是返回0。由於item.toString()返回的值不同。我覺得我應該可以解決這個問題,但我總是在信息頁面上結束。

public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add("Info") 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
    menu.add("Preferences") 
     .setIcon(R.drawable.ic_preferences) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if(item.toString() == "Preferences"){ 
     Intent intent = new Intent(); 
     intent.setClass(this,Preferences.class); 
     startActivity(intent); 
     return true; 
    } 
    else { 
     Intent intent = new Intent(); 
     intent.setClass(this,Info.class); 
     startActivity(intent); 
     return true; 
    } 
} 

我想我應該在item.getItemId()開關代替,但我想不出哪裏定義動作條意見。有一段時間我都不解帶一個文件actionbar.xml菜單文件夾下,但收效甚微:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/preferences" 
     android:showAsAction="always" 
     android:icon="@drawable/ic_preferences"></item> 
    <item android:id="@+id/info" 
     android:showAsAction="always"></item> 
</menu> 

每個人都應該相信答案是相當簡單的。任何人都可以給我一個正確的方向,從SDK版本7到15的方法相同的方法嗎?

任何幫助,非常感謝。

+0

請按照尼克的答案。請注意,要比較字符串,您必須使用.equals()而不是==。所以,item.toString()==「首選項」應該是item.toString()。equals(「首選項」)。 – YuviDroid 2012-07-07 15:58:40

+0

謝謝。我會牢記這一點。 – rudder 2012-07-07 16:12:53

回答

2

試試這個:

private static final int MENU_INFO = 0; 
private static final int MENU_SETTINGS = 1; 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    menu.add(0, MENU_INFO, 0, "Info") 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    menu.add(0, MENU_SETTINGS, 0, "Preferences") 
     .setIcon(R.drawable.ic_preferences) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    return true; 
} 

/* Handles item selections */ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case MENU_INFO: 
     startActivity(new Intent(this, Info.class)); 
     return true; 
    case MENU_SETTINGS: 
     startActivity(new Intent(this, Preferences.class)); 
     return true; 
    } 
    return false; 
} 

訣竅的確使用item.getItemId();因爲你永遠無法知道究竟是在.toString()返回。通過在創建菜單選項時爲每個菜單項分配靜態int引用,您知道在onOptionsItemSelected-方法中哪個被單擊了。

+0

因此,我對actionbar.xml的蹩腳嘗試是死路一條,文件只能被刪除?感謝您的快速響應,尼克。 – rudder 2012-07-07 16:04:50

+0

這工作正常。非常感謝尼克。當我的聲譽足夠好的時候,我會加倍努力:-) – rudder 2012-07-07 16:11:40

+0

謝謝:-)!我很高興它的工作:)!是的,你可以刪除actionbar.xml(也可以在.xml文件中定義菜單,但我覺得它更容易(至少對於小菜單來說)直接在Activity中執行)。我想你可以「接受」我的答案(使用旁邊的綠色複選標記),即使沒有任何聲望。 – Nick 2012-07-07 16:51:47

相關問題