从视图中添加可点击的SubMenu抛出:BadTokenException:无法添加窗口

时间:2016-03-24 21:26:18

标签: android

当我在一个从RelativeLayout扩展的类中时,我正在添加子菜单:

@Override
protected void onCreateContextMenu(ContextMenu menu) {
    super.onCreateContextMenu(menu);
    SubMenu subMenu = menu.addSubMenu("Submenu");
    subMenu.add("SUB1");
    subMenu.add("SUB2");
}

我正在使用以下方式显示菜单:

showContextMenu();

现在一切都很好,“Submenu”项目表现得非常好。当我点击“子菜单”项时,它会产生这个例外:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
 at android.view.ViewRootImpl.setView(ViewRootImpl.java:542)
 at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
 at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
 at android.app.Dialog.show(Dialog.java:286)
 at com.android.internal.view.menu.MenuDialogHelper.show(MenuDialogHelper.java:95)
 at com.android.internal.view.menu.ListMenuPresenter.onSubMenuSelected(ListMenuPresenter.java:139)
 at com.android.internal.view.menu.MenuBuilder.dispatchSubMenuSelected(MenuBuilder.java:266)
 at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:902)
 at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
 at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:173)
 at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:952)
 at android.widget.AdapterView.performItemClick(AdapterView.java:302)
 at android.widget.AbsListView.performItemClick(AbsListView.java:1188)
 at android.widget.AbsListView$PerformClick.run(AbsListView.java:3009)
 at android.widget.AbsListView$3.run(AbsListView.java:3767)
 at android.os.Handler.handleCallback(Handler.java:733)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:136)
 at android.app.ActivityThread.main(ActivityThread.java:5433)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:515)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
 at dalvik.system.NativeStart.main(Native Method)

实际上我不太了解异常,我没有看到子菜单如何显示的任何示例,我认为它会显示在弹出对话框中或类似的东西?

我需要做的是显示一个包含子项的菜单项,我不在活动中!

1 个答案:

答案 0 :(得分:0)

我没有找到任何针对该问题的解决方案,我必须使用PopupMenu类,它可以按照我想要的方式工作。 您可以使用此商品tutorial