我正在尝试从ActionBarSherlock请求搜索。
我的课程扩展了SherlockListActivity。
这就是我向ActionBar添加菜单按钮的方式:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("Save")
.setIcon(R.drawable.ic_action_search)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
MenuItem.SHOW_AS_ACTION_WITH_TEXT);
return true;
}
问题是我无法通过id调用它:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case ?????: {
onSearchRequested();
return true;
}
}
return true;
}
人们通常如何解决这个问题?
感谢。
答案 0 :(得分:4)
如果您从XML菜单文件中提取菜单,则会设置一个ID,然后您可以在onOptionsItemSelected
方法中使用该ID。像这样:
XML
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:icon="@drawable/ic_menu_search"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView" android:title="@string/search"/>
</menu>
片段
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_search:
onSearchRequested();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
答案 1 :(得分:0)
您也可以使用
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
menu.add(0, 1, 1, "Refresh").setIcon(R.drawable.ic_refresh).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add(0, 2, 2, "Search").setIcon(R.drawable.ic_search).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
switch (item.getItemId()){
case 1:
...
break;
case 2:
...
break;
}
return true;
}