2011-12-17 2 views
0

Я бы хотел, чтобы моя кнопка меню в моем основном действии была открыта во все времена. Я использовал:Храните Android-меню в любое время: onOptionsMenu

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

, который открывает меню при поступлении на мероприятие. Однако, когда я нажимаю опцию меню botton для перехода к другому действию и нажимаю кнопку «Назад», меню уходит и требует, чтобы я нажимал клавишу «menu», чтобы вернуть его. Я бы хотел, чтобы меню всегда было открытым для этой конкретной деятельности.

Я попытался переопределить onBackPressed своей деятельности по:

@Override 

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

И я попытался добавить this.openOptionsMenu в OnCreate. Когда я делаю это, мой сбой приложения с ошибкой:

12-17 09: 19: 46,674: ERROR/AndroidRuntime (4940): к неустранимой: главной 12-17 09: 19: 46,674: ERROR/AndroidRuntime (4940): java.lang.RuntimeException: не удается запустить активность ComponentInfo {com.cmu.community/com.cmu.community.HomeActivity}: android.view.WindowManager $ BadTokenException: Невозможно добавить нулевой токен окна; работает ли ваша деятельность? 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): у 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 (Activi tyThread.java:4627) 12-17 09: 19: 46.674: ERROR/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 (родной метод) 12-17 09: 19: 46.674: ERROR/AndroidRuntime (4940): вызвано: android.view.WindowManager $ BadTokenException: Невозможно добавить нулевой токен окна; работает ли ваша деятельность? 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): 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

У кого-нибудь есть решение для этого?

+0

Пожалуйста, не делайте этого. – CommonsWare

+0

Хорошо. Я беру его по той же причине, о которой упомянул Юозас ниже ... – user836200

+0

Не только это, но и меню опций отличается от Android 3.0+, когда вы должны использовать панель действий. Если вам не нравятся способы выключения кнопок, подумайте над добавлением панели действий, используя что-то вроде ActionBarSherlock для обратной совместимости. – CommonsWare

ответ

1

Меню опций - это действия, которые вы хотите скрыть. Добавьте кнопки в макет для действий, которые вы всегда будете доступны.

Меню опций действительно не предназначено для того, что вы хотите. Таким образом, если вы каким-то образом решите свою текущую проблему, ваш QA (или пользователи) скоро найдут для вас другие проблемы.

+0

Вначале у меня были кнопки на макете, но было сложно разместить элементы на экране, как я хотел. Меню опций имеет наибольший смысл, и я видел это в другом приложении. Я думал, что onAttachedToWindow - самый безопасный способ сделать это: @Override public void onAttachedToWindow() { super.onAttachedToWindow(); openOptionsMenu(); } – user836200

+0

благодарит за вашу помощь! – user836200

Смежные вопросы