在扩展从其菜单中激活其他活动的示例Android活动时,我开始在onOptionsItemSelected
内处理一些菜单项,并通过调用{{1}来处理一些菜单项(刚刚触发了意图) } setIntent
内。
基本上类似于:
onCreateOptionsMenu
显然,在这种情况下,在MENU_ID_3上设置的Intent永远不会被触发,或者无论如何相关活动永远不会被启动。
Android javadoc在某些时候就像<< [如果您在菜单项上设置了一个意图] 而没有其他任何东西处理该项,那么默认行为将是[启动活动]意图]>>。
它实际意味着什么“没有别的东西处理这个项目”?
从@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(0, MENU_ID_1, Menu.NONE, R.string.menu_text_1);
menu.add(0, MENU_ID_2, Menu.NONE, R.string.menu_text_2);
menu.add(0, MENU_ID_3, Menu.NONE, R.string.menu_text_3).
setIntent(new Intent(this, MyActivity_3.class));
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch (item.getItemId())
{
case (MENU_ID_1):
// Process menu command 1 ...
return true;
case (MENU_ID_2):
// Process menu command 2 ...
// E.g. also fire Intent for MyActivity_2
return true;
default:
return false;
}
}
返回false是否足够?
我也尝试过不要在开头调用onOptionsItemSelected
,只在默认的switch情况下调用它,但是我有相同的结果。
有没有人有任何建议? Android是否允许混合两种类型的处理?
感谢大家的时间。
答案 0 :(得分:1)
确定。解决方案很愚蠢。目标活动名称(例如示例中的MyActivity_3
)在清单中拼写错误。
我将第3个菜单项处理更改为onOptionsItemSelected
中的经典开关逻辑,我在Eclipse调试器中遇到了ActivityNotFoundException
异常。
通过以“setIntent方式”处理菜单项,没有抛出任何异常。虽然如果我查看LogCat,我本可以发现一个MenuItemImpl:Can't find activity to handle intent; ignoring
。