2

我是 android 的菜鸟,我正在使用 ActionBarSherlock 的菜单栏来访问菜单。在低于 API 11 的 Android API 上一切正常,但对于任何 API 11 及以上的菜单栏/菜单项都没有响应。当我单击菜单项时它们会突出显示,但它们不会执行。几乎就像菜单项失去了他们的听众一样,是否有我忘记实施的设置?任何帮助是极大的赞赏。

我的代码:

//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;
    }
4

3 回答 3

3

如果我不得不猜测,您的导入 forMenuItem是 for android.view.MenuItem,而不是 Sherlock 等价物。

如果是这样,我建议:

  • 你添加@OverrideonOptionsItemSelected()

  • 您删除所有android.view.*导入,然后将它们重新添加为 Sherlock 导入(例如,通过 Eclipse 中的 Ctrl-Shift-O)

  • 您合并了两种onCreateOptionsMenu()方法,使用带有 Sherlock 导入的一种方法

于 2013-02-20T00:55:05.647 回答
2

我认为答案是您在处理菜单事件时需要“返回真”。

此外,您可能会发现,如果您将方法重组为以下内容,您将更容易阅读和维护它。

@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;

}

于 2013-02-20T01:59:56.457 回答
1

我认为当您在 onCreateOptionsMenu 中添加菜单项时,您应该在菜单项中添加一个 OnMenuItemClickListener。然后添加 OnMenuItemSelected 方法并在 OnMenuItemSelected 方法中实现您在 onOptionItemSelected 中的代码。所以你应该...

@Override
public boolean onMenuItemClick(MenuItem item) {  

     // Code from inside onoptionItemSelected
}
于 2013-02-21T03:39:43.553 回答