菜单和ActionBarSherlock

19
我需要一个关于如何使用Action Bar Sherlock添加菜单项的示例或教程。 当我使用简单菜单并导入相关内容时。
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

当我调用时
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.settings_menu, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.goToSettings:
            startActivity(new Intent(this, SetPreference.class));
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }

    }

然后我会遇到不能覆盖SherlockActivity中的final方法的错误。


使用Ctrl+Shift+O修复所有导入。确保您正在使用随ActionBarSherlock一起提供的“android support jar”,并确保将ActionBarSherlock添加到项目库中以供您的项目使用。 - Jared Burrows
3个回答

49
你需要使用com.actionbarsherlock.view包中的MenuMenuInflaterMenuItem类:
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings_menu, menu);

    return super.onCreateOptionsMenu(menu);
}

顺便提一下,ActionBarSherlock 包含许多示例。


1
只是想评论一下,如果你在使用ActionBarSherlock时发现你的主页按钮点击无效,@StenaviN的答案将解决你的问题。真希望我3小时前就看到了这个... - Kai
代码中只有一个错误,return语句必须是: return super.onCreateOptionsMenu(menu); - Guido
@Guido 然而,如果super是SherlockFragmentActivity,那么super.onCreateOptionsMenu(menu);的实现只是public boolean onCreateOptionsMenu(Menu menu) { return true; } - Peter K.
@Guido,我已经按照建议更正了_return_语句。然而,这里有一段来自开发者文档的引用:“必须返回true才能显示菜单;如果返回false,则不会显示菜单。” - StenaviN

3
我使用了@Matt上面的答案,但在onContextItemSelected中遇到了问题。
基本上,你只需要使用
@Override
public boolean onContextItemSelected(com.actionbarsherlock.view.MenuItem item) {
    /* ... */
}

代替,而不是
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
    /* ... */
}

3
我用了@StenaviN上面的答案,但在onContextItemSelected中遇到了问题。这篇文章为我解决了问题:链接
基本上,你只需要使用:
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
    /* ... */
}

替代

@Override
public boolean onContextItemSelected(MenuItem item) {
    /* ... */
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接