0

I'd like for my menu button in my main activity to be open at all times. I've used:

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

which opens the menu when I go to the Activity. However, when I press the menu botton option to go to another activity and press the back button, the menu goes away and requires that I press the "menu" key to get it back. I'd like for the menu to stay open at all times for this particular activity.

I've tried to override the Activity's onBackPressed:

@Override

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

And I've tried adding this.openOptionsMenu in the onCreate. When I do that, my application crashes with the error:

12-17 09:19:46.674: ERROR/AndroidRuntime(4940): FATAL EXCEPTION: main 12-17 09:19:46.674: ERROR/AndroidRuntime(4940): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cmu.community/com.cmu.community.HomeActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 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: ERROR/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: ERROR/AndroidRuntime(4940): at android.app.ActivityThread.main(ActivityThread.java:4627) 12-17 09:19:46.674: ERROR/AndroidRuntime(4940): at java.lang.reflect.Method.invokeNative(Native Method) 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): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 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: ERROR/AndroidRuntime(4940): at 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 more

Does anyone have a solution for this?

user836200
  • 655
  • 2
  • 12
  • 20
  • Okay. I take its for the same reason Juozas mentioned below... – user836200 Dec 17 '11 at 17:34
  • Not only that, but the options menu is different for Android 3.0+, when you should be using the action bar. If you do not like the way your buttons turned out, consider adding an action bar, using something like ActionBarSherlock for backwards compatibility. – CommonsWare Dec 17 '11 at 17:53

1 Answers1

1

Options menu is for actions that you want to be hidden. Add buttons to your layout for the actions that you want to always be accessible.

Options menu was really not designed for what you want it to do. Thus if you solve your current problem in some way, your QA (or users) will soon find other problems for you to solve.

Juozas Kontvainis
  • 9,461
  • 6
  • 55
  • 66
  • I initially had buttons on the layout but it was difficult to layout the items on the screen how I wanted to. The options menu makes the most sense and I've seen this done in another application. I thought the onAttachedToWindow was the safest way to do it: @Override public void onAttachedToWindow() { super.onAttachedToWindow(); openOptionsMenu(); } – user836200 Dec 17 '11 at 15:02