为什么ActionBarSherlock没有响应?

时间:2013-02-20 00:43:13

标签: android menu actionbarsherlock listener

我是Android的菜鸟,我正在使用ActionBarSherlock的菜单栏来访问菜单。在API低于API 11的情况下一切正常,但对于任何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;
    }

3 个答案:

答案 0 :(得分:3)

如果我不得不猜测,MenuItem的导入是android.view.MenuItem,而不是Sherlock的导入。

如果是这样,我建议:

  • 您将@Override添加到onOptionsItemSelected()

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

  • 您使用Sherlock导入方法合并两个onCreateOptionsMenu()方法

答案 1 :(得分: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;

}

答案 2 :(得分:1)

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

@Override
public boolean onMenuItemClick(MenuItem item) {  

     // Code from inside onoptionItemSelected
}