我是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;
}
答案 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
}