2013-02-20 78 views
2

我是android的noob,我使用ActionBarSherlock的菜單欄訪問菜單。在Android API低於API 11的情況下,一切正常,但對於任何API 11和以上版本,菜單欄/菜單項都沒有響應。菜單項突出顯示,當我點擊他們,但他們不執行。就好像菜單項已經失去了他們的聽衆是否有一個我忘了實現的設置?任何幫助是極大的讚賞。爲什麼ActionBarSherlock沒有響應?

我的代碼:

//My Sherlock wrapper 
ActionBarSherlock mSherlock = ActionBarSherlock.wrap(this); 

//OnCreate 
setTheme(R.style.Theme_Sherlock); 
mSherlock.setContentView(R.layout.main); 

//Menu Methods 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    switch (item.getItemId()) 
    { 
     case 1: // id from the xml file 
      Intent i = new Intent("com.bmoney.GSCC.OPTIONS"); 
      startActivity(i); 
      return true; // we handled the click, dont pass it up the chain 

     case 2: // id from the xml file 
      Intent i2 = new Intent("com.bmoney.GSCC.PREFS"); 
      startActivity(i2); 
      return true; 
    } 
    return false; 
} 

    @Override 
    public boolean onCreateOptionsMenu(android.view.Menu menu) { 
     // TODO Auto-generated method stub 
     return mSherlock.dispatchCreateOptionsMenu(menu); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { //<-- has Sherlock Menu Import 

     menu.add(0,1,0,"Preferences").setIcon(R.drawable.ic_action_example).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     menu.add(0,2,0,"Help").setIcon(R.drawable.info).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

     return true; 
    } 

回答

1

我想你應該添加一個OnMenuItemClickListener到您的菜單項,當你在onCreateOptionsMenu添加它們。然後添加OnMenuItemSelected方法並在OnMenuItemSelected方法中實現onOptionItemSelected中的代碼。所以你應該有...

@Override 
public boolean onMenuItemClick(MenuItem item) { 

    // Code from inside onoptionItemSelected 
} 
3

如果我猜的話,你對進口是MenuItemandroid.view.MenuItem,而不是夏洛克等同。

如果是的話,我建議:

  • 你加@OverrideonOptionsItemSelected()

  • 刪除所有android.view.*進口,然後將它們重新添加夏洛克的人(例如,通過按Ctrl-按住Shift O在日食)

  • 你鞏固你的兩個onCreateOptionsMenu()方法,使用一個與福爾摩斯導入

+0

感謝您的迴應。我的menuitem impot已經是sherlock的等價物。我遵循了您的建議,但是當我整合我的OnCreateOptionsMenu時,菜單項不會出現在菜單欄中。請檢查我的編輯。我做錯什麼了嗎? – 2013-02-20 01:20:48

+0

@ B.Money:除了科里斯科特的回答之外,沒有什麼可以想到的。以下是一個帶有工作操作欄的示例應用程序:https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/ActionBarDemo – CommonsWare 2013-02-20 11:52:33

2

我認爲答案是當你處理菜單事件時你需要「返回true」。

此外,您可能會發現,如果將您的方法重構爲以下內容,您將可以更輕鬆地閱讀和維護它。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

switch (item.getItemId()) 
{ 
    case R.id.options: // id from the xml file 
     Intent i = new Intent("com.bmoney.GSCC.OPTIONS"); 
     startActivity(i); 
     return true; // we handled the click, dont pass it up the chain 

    case R.id.prefs: // id from the xml file 
     Intent i = new Intent("com.bmoney.GSCC.PREFS"); 
     startActivity(i); 
     return true; 
} 

return false; 

}

+0

感謝您的回覆,但這對我無效。 – 2013-02-20 13:18:41

相關問題