这只发生在4.x(可能是3.x – 无法检查),但不是2.3或之前.在模拟器和不同设备上测试.
有趣的事实:当我在活动渲染后旋转设备并按下菜单按钮时,它可以正常工作.
此外,在列表适配器仍然加载且列表为空时,菜单仍然有效.填充列表后会出现问题(仅在上述版本2.3之上)
菜单本身可以是一个没有资源的简单单行,它仍然会发生.
选项菜单代码:
/** * Prepare the options menu * @param menu The menu * @return You must return true for the menu to be displayed; if you return false it will not be shown. */@OverrIDepublic boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); Title = getString(R.string.optionsmenu_search); MenuItem item1 = menu.add(Menu.NONE,MENU_SEARCH,Menu.NONE,Title); item1.setIcon(R.drawable.ic_menu_search); return super.onPrepareOptionsMenu(menu);} * Handle options menu click * @param item menu item * @return */@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) { switch(item.getItemID()) { // ... } return OptionsMenu.itemSelected(this,item) || super.onoptionsItemSelected(item);}
应用程序代码中不会发生异常,也不会引用应用程序的资源(它们存在,R被删除/重建多次,项目已清除等)
堆栈跟踪:
(它似乎引用了一些xml资源,但菜单不是基于xml的)
04-13 23:45:39.081: E/AndroIDRuntime(2933): FATAL EXCEPTION: main04-13 23:45:39.081: E/AndroIDRuntime(2933): androID.content.res.Resources$NotFoundException: Resource ID #0x109004404-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.content.res.Resources.getValue(Resources.java:1019)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.content.res.Resources.loadXmlResourceParser(Resources.java:2107)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.content.res.Resources.getLayout(Resources.java:858)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:394)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.vIEw.menu.BaseMenuPresenter.getMenuVIEw(BaseMenuPresenter.java:70)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.policy.impl.PhoneWindow$PanelFeatureState.getIconMenuVIEw(PhoneWindow.java:3298)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.policy.impl.PhoneWindow.initializePanelContent(PhoneWindow.java:1096)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:559)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:817)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1486)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.dispatchKeyEvent(PhoneWindow.java:1813)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.vIEw.VIEwRootImpl.deliverKeyEventPostIme(VIEwRootImpl.java:3300)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.vIEw.VIEwRootImpl.handleFinishedEvent(VIEwRootImpl.java:3273)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.vIEw.VIEwRootImpl.handleMessage(VIEwRootImpl.java:2436)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.os.Handler.dispatchMessage(Handler.java:99)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.os.Looper.loop(Looper.java:137)04-13 23:45:39.081: E/AndroIDRuntime(2933): at androID.app.ActivityThread.main(ActivityThread.java:4340)04-13 23:45:39.081: E/AndroIDRuntime(2933): at java.lang.reflect.Method.invokeNative(Native Method)04-13 23:45:39.081: E/AndroIDRuntime(2933): at java.lang.reflect.Method.invoke(Method.java:511)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)04-13 23:45:39.081: E/AndroIDRuntime(2933): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:551)04-13 23:45:39.081: E/AndroIDRuntime(2933): at dalvik.system.NativeStart.main(Native Method)
任何的想法?非常感谢,这是一个发布前的阻止者..
解决方法 终于解决了这个问题.它完全隐藏在这行代码中(出现在完全不同的位置):mResources = new Resources(mgr,mMetrics,null);
最后一个参数应包含配置,但包含null.似乎在AndroID 3.x之前一直有效
这是包含故障线的旧代码:
private static voID prepareResources(Context context) { if (mMetrics != null) return; mMetrics = new displayMetrics(); Activity act = (Activity)context; act.getwindowManager().getDefaultdisplay().getMetrics(mMetrics); AssetManager mgr = context.getAssets(); mResources = new Resources(mgr,null);}
这解决了问题(注意最后一行):
private static voID prepareResources(Context context) { if (mMetrics != null) return; mMetrics = new displayMetrics(); Activity act = (Activity)context; act.getwindowManager().getDefaultdisplay().getMetrics(mMetrics); AssetManager mgr = context.getAssets(); mResources = new Resources(mgr,act.getResources().getConfiguration());}
(代码在我们在项目中使用的UrlimageVIEwHelper(https://github.com/koush/UrlImageViewHelper)类中)
另见Crash when opening Option Menu
总结以上是内存溢出为你收集整理的Android:Android 3中的选项菜单例外/资源$NotFoundException:资源ID#0x1090044全部内容,希望文章能够帮你解决Android:Android 3中的选项菜单例外/资源$NotFoundException:资源ID#0x1090044所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)