活动泄漏了窗口android.widget.PopupWindow API 27

6
我有一个简单的Activity,其中包含一个弹出式菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu,menu);

    return super.onCreateOptionsMenu(menu);
}

当我打开菜单并旋转时,出现以下错误:
活动泄露了窗口android.widget.PopupWindow
E / WindowManager:android.view.WindowLeaked:Activity com.ehr.CompanyActivity已泄漏窗口android.widget.PopupWindow $ PopupDecorView {f8c5b6f VE ...... ...... ID 0,0-515,504}最初是在此处添加的,在android.view.ViewRootImpl.java(485)中,android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346),android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93),android.widget.PopupWindow.invokePopup(PopupWindow.java:1433),android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1284),android.support.v7.widget.AppCompatPopupWindow.showAsDropDown(AppCompatPopupWindow.java:76),android.support.v4.widget.PopupWindowCompat $ PopupWindowCompatApi19Impl.showAsDropDown(PopupWindowCompat.java:115),android.support.v4.widget.PopupWindowCompat.showAsDropDown(PopupWindowCompat.java:219),android.support.v7.widget.ListPopupWindow.show(ListPopupWindow.java:733),android.support.v7.view.menu.StandardMenuPopup.tryShow(StandardMenuPopup.java:176),android.support.v7.view.menu.StandardMenuPopup.show(StandardMenuPopup.java:203),android.support.v7.view.menu.MenuPopupHelper.showPopup(MenuPopupHelper.java:289),android.support.v7.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:176),android.support.v7.widget.ActionMenuPresenter $ OpenOverflowRunnable.run(ActionMenuPresenter.java:805),android.os.Handler.handleCallback(Handler.java:790),android.os.Handler.dispatchMessage(Handler.java:99),android.os.Looper.loop(Looper.java:164),android.app.ActivityThread.main(ActivityThread.java:6494),java.lang.reflect.Method.invoke(Native Method),com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java: 438)
这基本上是一段通用代码,我没有写更多的内容。

你能分享整个活动代码和整个“错误”与问题吗? - AskNilesh
@NileshRathod 我已经编辑过了。 - Nick
你必须尝试这个 return true - Ravi Patel
我也在前几天(在Nougat上)遇到了同样的错误。如果你愿意,你可以在onDestroy()中处理这个情况。 - Rahul
在Activity的onDestroy()方法中添加invalidateOptionsMenu()可能会解决问题。不过我不确定。 - Rahul
显示剩余6条评论
1个回答

0
问题在于您已经扩展了菜单,但仍然返回super.onCreateOptionsMenu(menu);。请将返回值更改为true
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.menu,menu);

     return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接