Crash when opening Option Menu

ε祈祈猫儿з 提交于 2019-12-10 19:23:55

问题


I have ordinary activity with Option Menu, which I created by this code:

@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;
}

On Android 2.3 and older (2.2, 2.1) is everything fine. But when I run this app on Android 4.0 (ICS - emulator, Galaxy Nexus, Nexus S) when I press menu button the app crashdown with this exception:

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)

I can't localize resource with ID #0x1090044 (it's not in my R.java or any other files) and I don't know what it should be. Maybe some internal menu layout? I already also tried to clean the project. I know that there are new "desing rules" for Android 4.0 ICS and using Action Bar instead older menu, but I need this code get working even on ICS for many different reasons. Should I some how edit this code to work even on ICS? I also already tried creating menu from XML file using this code with same exception.

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

Thank you for any advice!


回答1:


Finally! The problem was in something slightly different. I was using this code:

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);

I didn't check this wrong line of code before because on 2.3 and less everything was fine. But now on 4.0 something was changed in internal resources. I don't know if it is some sort of bug (I'm calling this code for many times in my Activity but only when I use Options menu error is raised), but for sure there was the bug in my code.




回答2:


Try clean project and run again. If error isn't gone, check what's the id value in R.java for your menu (R.menu.menu) or if it exists.




回答3:


According to your Answer the code to manually change locale causes the error but looking at your stack trace it seems that you may have a resource missing, but anyway I have similar Locale change code and was experiencing errors only under ICS so I have added the following in the hope that it may be helpful:

To prevent the error add the following to AndroidManifest.xml android:configChanges="locale"

Here is an extract from Activity Javadoc that explains why the error may occur:

In some special cases, you may want to bypass restarting of your
activity based on one or more types of configuration changes. This is done with the android:configChanges attribute in its manifest. For any types of configuration changes you say that you handle there, you will receive a call to your current activity's
onConfigurationChanged method instead of being restarted. If a configuration change involves any that you do not handle, however, the activity will still be restarted and onConfigurationChanged will not be called.



来源:https://stackoverflow.com/questions/8576484/crash-when-opening-option-menu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!