0
我試圖創建一個OptionsMenu
動態Activity
啓動。在onCreate
我打電話:openOptionsMenu();錯誤在onCreate()
openOptionsMenu(); //here i get the error
closeOptionsMenu();
創建菜單,但我得到了以下錯誤:
02-07 12:50:47.183: E/AndroidRuntime(31427): FATAL EXCEPTION: main
02-07 12:50:47.183: E/AndroidRuntime(31427): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.donauinvest.idealsfa/com.donauinvest.idealsfa.forme.ComenziForm}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.ActivityThread.access$1500(ActivityThread.java:135)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.os.Handler.dispatchMessage(Handler.java:99)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.os.Looper.loop(Looper.java:150)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.ActivityThread.main(ActivityThread.java:4389)
02-07 12:50:47.183: E/AndroidRuntime(31427): at java.lang.reflect.Method.invokeNative(Native Method)
02-07 12:50:47.183: E/AndroidRuntime(31427): at java.lang.reflect.Method.invoke(Method.java:507)
02-07 12:50:47.183: E/AndroidRuntime(31427): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
02-07 12:50:47.183: E/AndroidRuntime(31427): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
02-07 12:50:47.183: E/AndroidRuntime(31427): at dalvik.system.NativeStart.main(Native Method)
02-07 12:50:47.183: E/AndroidRuntime(31427): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.view.ViewRoot.setView(ViewRoot.java:562)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:185)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:97)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.view.Window$LocalWindowManager.addView(Window.java:433)
02-07 12:50:47.183: E/AndroidRuntime(31427): at com.android.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:563)
02-07 12:50:47.183: E/AndroidRuntime(31427): at com.android.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:439)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.Activity.openOptionsMenu(Activity.java:2486)
02-07 12:50:47.183: E/AndroidRuntime(31427): at com.donauinvest.idealsfa.forme.ComenziForm.onCreate(ComenziForm.java:130)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
02-07 12:50:47.183: E/AndroidRuntime(31427): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
02-07 12:50:47.183: E/AndroidRuntime(31427): ... 11 more
我創建這樣的菜單:
android.view.Menu mymenu=null;
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu)
{
menu.clear();
SubMenu opMenu = menu.addSubMenu(0, 0, 0, "Operatii");
int lastindex=0;
if (configurare.bChooseTipCda && istoric==0 && (clientid > 0))
{
TipComandaClass.setTipComandaContextForDB(this);
tc = TipComandaClass.get_TipComanda();
if (tc.size()>0)
{
for (int i = 0; i < tc.size(); i++)
{
opMenu.add(0,i,0,tc.get(i).getDenumire());
lastindex=i;
}
lastindex++;
opMenu.add(0,lastindex,0,"NOU");
lastindex++;
opMenu.add(0,lastindex,0,"DETALII");
}
}
if (istoric==1 && configurare.bRetransmitereComanda)
{
lastindex++;
opMenu.add(0,lastindex,0,"RETRANSMITERE");
}
if (istoric == 1 && configurare.bInserareComandaIstoric)
{
lastindex++;
opMenu.add(0,lastindex,0,"INSEREAZA");
}
mymenu=menu;
if (clientid > 0)
{
for (int i=0;i<mymenu.getItem(0).getSubMenu().size();i++)
{
if (mymenu.getItem(0).getSubMenu().getItem(i).getTitle().equals("NOU"))
{
mymenu.getItem(0).getSubMenu().getItem(i).setEnabled(true);
break;
}
}
}
else
{
for (int i=0;i<mymenu.getItem(0).getSubMenu().size();i++)
{
if (mymenu.getItem(0).getSubMenu().getItem(i).getTitle().equals("NOU"))
{
mymenu.getItem(0).getSubMenu().getItem(i).setEnabled(false);
break;
}
}
}
if (listCom.size() > 0)
{
for (int i=0;i<mymenu.getItem(0).getSubMenu().size();i++)
{
if (mymenu.getItem(0).getSubMenu().getItem(i).getTitle().equals("DETALII"))
{
mymenu.getItem(0).getSubMenu().getItem(i).setEnabled(true);
break;
}
}
}
else
{
for (int i=0;i<mymenu.getItem(0).getSubMenu().size();i++)
{
if (mymenu.getItem(0).getSubMenu().getItem(i).getTitle().equals("DETALII"))
{
mymenu.getItem(0).getSubMenu().getItem(i).setEnabled(false);
break;
}
}
}
if (istoric == 1)
{
for (int i=0;i<mymenu.getItem(0).getSubMenu().size();i++)
{
if (mymenu.getItem(0).getSubMenu().getItem(i).getTitle().equals("NOU"))
{
mymenu.getItem(0).getSubMenu().getItem(i).setEnabled(false);
break;
}
}
}
if (listCom.size() > 0)
{
mymenu.setGroupVisible(0, true);
}
else
{
mymenu.setGroupVisible(0, false);
}
super.onCreateOptionsMenu(menu);
return true;
}//onCreateOptionsMenu
高級謝謝!
你爲什麼叫openOptionsMenu()中的onCreate():我通過呼叫轉移到
onResume
成功地規避了這個問題?這足以覆蓋Activity中的onCreateOptionsMenu(),並且當用戶點擊菜單按鈕時,菜單將與您放入的項目一起出現。 另外,你可以在這裏粘貼你的活動代碼的其餘部分嗎? – papaiatis 2012-02-07 11:17:00問題是,我必須啓用/禁用onCreateOptionsMenu()之外的菜單項。因此我使用mymenu變量。 – user1127431 2012-02-07 11:29:40
我試着用this.openOptionsMenu()和((Activity)this).openOptionsMenu(),但沒有運氣。我有一個在其中工作的活動,但如果我嘗試在其他活動中做出同樣的事情,則會發生錯誤。 – user1127431 2012-02-07 11:38:16