将menuItem.setIntent与onOptionsItemSelected混合不起作用

时间:2010-12-30 21:50:48

标签: android android-activity android-intent menuitem

在扩展从其菜单中激活其他活动的示例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是否允许混合两种类型的处理?

感谢大家的时间。

1 个答案:

答案 0 :(得分:1)

确定。解决方案很愚蠢。目标活动名称(例如示例中的MyActivity_3)在清单中拼写错误。

我将第3个菜单项处理更改为onOptionsItemSelected中的经典开关逻辑,我在Eclipse调试器中遇到了ActivityNotFoundException异常。

通过以“setIntent方式”处理菜单项,没有抛出任何异常。虽然如果我查看LogCat,我本可以发现一个MenuItemImpl:Can't find activity to handle intent; ignoring