打开选项菜单时崩溃

时间:2011-12-20 13:51:12

标签: android android-4.0-ice-cream-sandwich

我使用选项菜单进行普通活动,我使用此代码创建:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, 1, 0, "A");
  menu.add(0, 2, 0, "B");
  menu.add(0, 3, 0, "C");
  return true;
}

在Android 2.3和更早版本(2.2,2.1)上一切都很好。但当我在Android 4.0(ICS - 模拟器,Galaxy Nexus,Nexus S)上运行此应用程序时,按下菜单按钮,应用程序崩溃时出现此例外情况:

W/ResourceType(9263): Failure getting entry for 0x01090044 (t=8 e=68) in package 0 (error -75)
D/AndroidRuntime(9263): Shutting down VM
W/dalvikvm(9263): threadid=1: thread exiting with uncaught exception (group=0x40a4a1f8)
FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException: Resource ID #0x1090044
E/AndroidRuntime(9263):
at android.content.res.Resources.getValue(Resources.java:1019)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2107)
at android.content.res.Resources.getLayout(Resources.java:858)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
at com.android.internal.view.menu.BaseMenuPresenter.getMenuView(BaseMenuPresenter.java:70)
at com.android.internal.policy.impl.PhoneWindow$PanelFeatureState.getIconMenuView(PhoneWindow.java:3298)
at com.android.internal.policy.impl.PhoneWindow.initializePanelContent(PhoneWindow.java:1096)
at com.android.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:559)
at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:817)
at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1486)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1813)
at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3300)
at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3273)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2436)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

我无法使用ID#0x1090044本地化资源(它不在我的R.java或任何其他文件中),我不知道它应该是什么。也许一些内部菜单布局?我已经尝试过清理该项目。 我知道Android 4.0 ICS有新的“设计规则”,而且使用Action Bar代替旧版菜单,但我需要这个代码甚至在ICS上工作有很多不同的原因。我是否应该如何编辑此代码甚至在ICS上工作? 我也尝试使用此代码从XML文件创建菜单,但有相同的例外。

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);

感谢您的任何建议!

3 个答案:

答案 0 :(得分:2)

最后!问题在于略有不同。我使用的是这段代码:

Resources standardResources = getResources();
AssetManager assets = standardResources.getAssets();
DisplayMetrics metrics = standardResources.getDisplayMetrics();
Configuration config = new Configuration(); 
// CORRECT is: Configuration config = standardResources.getConfiguration();
config.locale = new Locale(lang);
Resources defaultResources = new Resources(assets, metrics, config);

我之前没有检查过这个错误的代码行,因为在2.3并且更少的一切都很好。但现在在4.0上,内部资源发生了变化。我不知道它是否是某种错误(我在我的Activity中多次调用此代码,但只有当我使用选项菜单时出现错误),但我确实在我的代码中存在错误。

答案 1 :(得分:0)

尝试清理项目并再次运行。如果错误没有消失,请检查菜单(R.menu.menu)的R.java中的id值是否存在。或者是否存在。

答案 2 :(得分:0)

根据您的回答,手动更改区域设置的代码会导致错误,但查看堆栈跟踪似乎您可能缺少资源,但无论如何我有类似的区域设置更改代码并且仅在ICS下遇到错误所以我有添加以下内容,希望它可能有所帮助:

要防止错误,请将以下内容添加到AndroidManifest.xml         机器人:configChanges = “区域设置”

以下是Activity Javadoc的摘录,解释了可能发生错误的原因:

  

在某些特殊情况下,您可能希望绕过重新启动   基于一种或多种配置更改的活动。这是   在其清单中使用android:configChanges属性完成。对于   任何类型的配置更改,你说你在那里处理,   您将收到当前活动的电话   onConfigurationChanged方法而不是重新启动。但是,如果配置更改涉及您未处理的任何内容,则   活动仍将重新启动和onConfigurationChanged   将不会被召唤。

相关问题