2012-04-18 4 views
4

私のアプリにはいくつかのアクティビティがあり、すべてに同じオプションメニューがあります。 1つのアクティビティ(ListViewサブクラス)でのみ正常に動作し、メニューボタンをクリックするとクラッシュします。

これは、4.x(おそらく3.x - チェックできません)でのみ発生しますが、2.3以前では発生しません。エミュレータとさまざまなデバイスでテストされています。

興味深い事実:アクティビティがレンダリングされた後にデバイスを回転させてメニューボタンを押すと、正常に動作します。

また、リストアダプタがまだ読み込まれていて、リストが空の間、メニューは機能します。リストがいっぱいになると、問題が発生します(前述のバージョン2.3より上)

メニュー自体はリソースなしのシンプルな1ライナーになる可能性があります。

オプションメニューコード:

/** 
* 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. 
*/ 
@Override 
public 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 
*/ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     // ... 
    } 
    return OptionsMenu.itemSelected(this, item) || super.onOptionsItemSelected(item); 
} 

例外は、アプリケーションコードでは発生しません、またそれがアプリのressourceに参照するように思えるん(それらが存在する、Rは、何回も再構築/削除された、プロジェクトなどをクリア)

スタックトレース: (いくつかのXMLリソースを参照するように見えますが、メニューには、XMLベースではありません)

04-13 23:45:39.081: E/AndroidRuntime(2933): FATAL EXCEPTION: main 
04-13 23:45:39.081: E/AndroidRuntime(2933): android.content.res.Resources$NotFoundException: Resource ID #0x1090044 
04-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) 

任意のアイデア?ヘルプは大いに感謝しています、それは1つのプレリリースブロッカーです。

+0

は、そのmenu.xmlです(または、何か0x1090044です -/gen /のR.javaを参照してください)? – zapl

+0

xmlメニューはありません。上記のリソースはアプリのものではなく、Androidの内部リソースである必要があります。 – Bachi

+0

誰かを助ける場合には、grepcode.comのおかげで、上のスタックトレースのAndroidソースコードがあります:http://tinyurl.com/cbpo882 – Bachi

答えて

2

最後に問題を解決しました。これはかなり(全く別の場所に表示されます)このコード行の中に隠されています:

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, mMetrics, 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, mMetrics, act.getResources().getConfiguration()); 
} 

(コードがありますUrlImageViewHelper(https://github.com/koush/UrlImageViewHelper)私たちは、プロジェクトで使用するクラス)に

Crash when opening Option Menu

も参照してください。どのフォルダにある3210
+1

Btw:以前はUrlImageViewHelperでラインが修正されましたが、古いバージョンがありました。 https://github.com/koush/UrlImageViewHelper/issues/3を参照してください。 – Bachi

+0

うわー、百万のバチに感謝します。私はこの断続的なバグの原因を時代遅れに捜し求めようとしてきました。それは私を狂って運転している:) –

関連する問題