Search code examples
androidnullpointerexceptionpopupwindow

ListPopupWindow: getWindowVisibleDisplayFrame(Rect) null exception


When I click an item in my Toolbar I want to expand a listpopup but it does not work.

Inside the onOptionsItemSelected(MenuItem item) method

ListPopupWindow popup = new ListPopupWindow(getBaseContext());
popup.setAdapter(new ArrayAdapter<>(getBaseContext(), R.layout.dialog_checkview, R.id.checkview_title, stringList));
popup.setAnchorView(item.getActionView());
popup.setModal(true);
popup.show();

// ...

Exception

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.getWindowVisibleDisplayFrame(android.graphics.Rect)' on a null object reference
        at android.widget.PopupWindow.getMaxAvailableHeight(PopupWindow.java:1368)
        at android.widget.PopupWindow.getMaxAvailableHeight(PopupWindow.java:1346)
        at android.support.v7.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1174)
        at android.support.v7.widget.ListPopupWindow.show(ListPopupWindow.java:584)
        at com.mysecretpackage.android.activities.MainActivity.onOptionsItemSelected(MainActivity.java:271)
        at android.app.Activity.onMenuItemSelected(Activity.java:2895)
        at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353)
        at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:144)
        at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99)
        at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99)
        at android.support.v7.internal.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:72)
        at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:164)
        at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:740)
        at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
        at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153)
        at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
        at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948)
        at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:598)
        at android.support.v7.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139)
        at android.view.View.performClick(View.java:4785)
        at android.view.View$PerformClick.run(View.java:19884)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)

Solution

  • The problem is that your anchor view is not valid. I had the same problem and fixed it with this solution:

    popup.setAnchorView(getActivity().findViewById(R.id.idOfYourMenuItem));