【问题标题】:onOptionsItemSelected isn't picking the right clicked menu itemonOptionsItemSelected 没有选择右键单击的菜单项
【发布时间】:2013-11-25 05:53:47
【问题描述】:

我的活动中有以下代码:

import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
....
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add("Save")
            .setIcon(R.drawable.action_create).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    menu.add("Search")
            .setIcon(R.drawable.action_search)
            .setActionView(R.layout.collapsible_edittext)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    menu.add("Refresh")
            .setIcon(R.drawable.ic_refresh)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Toast.makeText(this, "Got click: " + item.getItemId(), Toast.LENGTH_SHORT).show();
    return true;
}

但是,无论我点击save search 还是refresh 我在屏幕上看到的都是:Got click 0

我希望每个点击的项目都有不同的id

我是不是做错了什么?

【问题讨论】:

  • 你在使用 ActionBarSherlock 吗?
  • 是的,我是。行为是否不同?
  • 我以前遇到过这个问题。检查:stackoverflow.com/a/10910315/362298
  • hmm 我的导入匹配 actionbarsherlock。所以这不是问题
  • 嗯,另一个想法:既然您是以编程方式创建项目,也许您需要自己定义 ID?尝试在 onCreateOptionsMenu 中的每个项目上调用 setId()

标签: java android android-layout


【解决方案1】:

正常的做法是将Menu 及其在xml 中的项目定义为资源-然后您可以为这些项目定义自己的ID。 Here's the android developer guide on how to do it with xml

另一个快速解决方法是不使用 onOptionsItemSelected() 中的 id,而是使用您定义的 MenuItem.getTitle()(即“保存”、“搜索”、“刷新”)。

【讨论】:

【解决方案2】:

在 onOptionsItemSelected 中遵循这个结构

        case R.id.your_case_name
        //What you want it to do such as a toast
        return true; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多