2011-12-17 99 views
0

我希望我的主菜單中的菜單按鈕始終處於打開狀態。我用過:保持Android菜單始終處於打開狀態:onOptionsMenu

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    openOptionsMenu(); 
} 

當我去活動時打開菜單。但是,當我按菜單按鈕選項轉到另一個活動並按下後退按鈕時,菜單消失,並且要求我按下「菜單」鍵才能恢復。我希望菜單在任何時候都保持開放狀態,以便進行此特定活動。

我試圖重寫活動的onBackPressed:

@Override 

public void onBackPressed(){ 
    super.onBackPressed(); 
    this.openOptionsMenu(); 
} 

我累了,在OnCreate添加this.openOptionsMenu。當我這樣做,我與錯誤應用程序崩潰:

9月12日至17日:19:46.674:ERROR/AndroidRuntime(4940):致命異常:主要 9月12日至17日:19:46.674:ERROR/AndroidRuntime( 4940):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.cmu.community/com.cmu.community.HomeActivity}:android.view.WindowManager $ BadTokenException:無法添加窗口 - 標記null無效;你的活動正在運行? 12 - 17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.app.ActivityThread.access $ 2300(ActivityThread.java:125) 12- 17 09:19:46.674:錯誤/ AndroidRuntime(4940):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android .os.Handler.dispatchMessage(Handler.java:99) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.os.Looper.loop(Looper.java:123) 12-17 09 :19:46.674:錯誤/ AndroidRuntime(4940):在android.app.ActivityThread.main(Activi tythread.java:4627) 12 - 17日09:19:46.674:錯誤/ AndroidRuntime(4940):在java.lang.reflect.Method.invokeNative(本機方法) 12 - 17 09:19:46.674:ERROR/AndroidRuntime (4940):at java.lang.reflect.Method.invoke(Method.java:521) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run(ZygoteInit.java:868) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 12-17 09 :19:46.674:ERROR/AndroidRuntime(4940):at dalvik.system.NativeStart.main(Native Method) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):引起:android.view.WindowManager $ BadTokenException:無法添加窗口 - 標記null無效;你的活動正在運行? 12 - 17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.view.ViewRoot.setView(ViewRoot.java:505) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.view.Window $ LocalWindowManager.addView(Window.java:424) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at com。 android.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:463) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at com.android.internal.policy.impl.PhoneWindow.openPanel( PhoneWindow.java:378) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.app。 Activity.openOptionsMenu(Activity.java:2330) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at com.cmu.community.HomeActivity.onCreate(HomeActivity.java:105) 12-17 09: 19:46.674:錯誤/ AndroidRuntime(4940):在android.app.Instrumentation。callActivityOnCreate(Instrumentation.java:1047) 12-17 09:19:46.674:ERROR/AndroidRuntime(4940):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 12-17 09:19:46.674: ERROR/AndroidRuntime(4940):... 11更多

有沒有人有解決方案?

+0

請不要這樣做。 – CommonsWare 2011-12-17 15:52:25

+0

好的。我採取它與Juozas在下面提到的相同的原因... – user836200 2011-12-17 17:34:28

+0

不僅如此,但Android 3.0以上的選項菜單是不同的,當你應該使用操作欄。如果你不喜歡按鈕的方式,可以考慮添加一個動作欄,使用ActionBarSherlock之類的東西來實現向後兼容性。 – CommonsWare 2011-12-17 17:53:26

回答

1

選項菜單適用於要隱藏的操作。將佈局的按鈕添加到您始終可以訪問的操作中。

選項菜單實際上並非設計用於您想要的功能。因此,如果您以某種方式解決當前的問題,您的QA(或用戶)很快就會找到其他問題供您解決。

+0

我最初在版面上有按鈕,但很難在屏幕上佈局我想要的東西。選項菜單最有意義,我已經在另一個應用程序中看到了這一點。我認爲onAttachedToWindow是最安全的方法:@Override public void onAttachedToWindow(){ super.onAttachedToWindow(); openOptionsMenu(); } – user836200 2011-12-17 15:02:55

+0

感謝您的幫助! – user836200 2011-12-17 17:19:01