为什么ActionBarSherlock菜单不起作用?

时间:2013-05-04 16:50:46

标签: android menu actionbarsherlock listener menuitem

我是Android开发的菜鸟,我有一个让菜单项监听器工作的问题。 当我点击菜单项时,应该显示吐司但没有任何反应。我有正确的导入并实现了menuitem监听器,所以我不明白为什么它不起作用。非常感谢任何帮助。

//ABS MenuItem import
import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0,1,0,"Gender").setIcon(R.drawable.female_icon).setOnMenuItemClickListener(this).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    menu.add(0,2,0,"Flip").setIcon(R.drawable.flip_icon).setOnMenuItemClickListener(this).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    menu.add(0,3,0,"Preferences").setIcon(R.drawable.ic_action_example).setOnMenuItemClickListener(RemedyActivity.this).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    menu.add(0,4,0,"Help").setIcon(R.drawable.info).setOnMenuItemClickListener(RemedyActivity.this).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);


    //Side Navigation
    getSupportMenuInflater().inflate(R.menu.main_menu, menu);
    if (sideNavigationView.getMode() == Mode.RIGHT) {
        menu.findItem(R.id.mode_right).setChecked(true);
    } else {
        menu.findItem(R.id.mode_left).setChecked(true);
    }
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onMenuItemClick(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId())
    {
        case 1:   
            Toast mToast = Toast.makeText(RemedyActivity.this, "works", Toast.LENGTH_SHORT);
            return true;  

        case 2:   
            Toast mToast2 = Toast.makeText(RemedyActivity.this, "works", Toast.LENGTH_SHORT);
            return true;
    }
    return false;
}

修改

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            sideNavigationView.toggleMenu();
            break;
        case R.id.mode_left:
            item.setChecked(true);
            sideNavigationView.setMode(Mode.LEFT);
            break;
        case R.id.mode_right:
            item.setChecked(true);
            sideNavigationView.setMode(Mode.RIGHT);
            break;
        case 1:   // id from the xml file
            Toast mToast = Toast.makeText(RemedyActivity.this, "works", Toast.LENGTH_SHORT);
            break;   // we handled the click, dont pass it up the chain

        case 2:   // id from the xml file
            Toast mToast2 = Toast.makeText(RemedyActivity.this, "works", Toast.LENGTH_SHORT);
            break;

        default:
            return super.onOptionsItemSelected(item);
    }
    return true;
}

3 个答案:

答案 0 :(得分:1)

我注意到您正在尝试使用侧面导航时显示吐司。我过去曾试图向这个图书馆敬酒一些问题。尝试另一种方法来确定按钮是否实际工作,例如NSLog。

答案 1 :(得分:0)

尝试覆盖

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            ...
       }
    }

而不是onMenuItemClick

答案 2 :(得分:0)

return super.onCreateOptionsMenu(menu);可能是你的问题。根据{{​​3}},“您必须返回true才能显示菜单;如果您返回false,则不会显示。”

如果super.onCreateOptionsMenu总是返回false(它可能会这样做),你的菜单就不会显示。

另外,您创建了toast,但是没有显示它。您需要明确调用show()。当前的eclipse插件应该会给你一个警告。