Menu popup menu cannot be used without binding

I want to use popup for a menu item in the action bar. This is all fine when I use this in Activity, but when I switch to the fragment, I get:

MenuPopupHelper cannot be used without an anchor 

my snippet:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_filter: createCategoriesPopupMenu(item); return true; case R.id.action_sort: createSortPopupMenu(item); return true; default: return super.onOptionsItemSelected(item); } } private void createSortPopupMenu(MenuItem item) { PopupMenu popup; final View menuItemView = getView().findViewById(item.getItemId()); Log.wtf("d","item getitemid"+item.getItemId()); if (menuItemView == null) { Log.wtf("d","menuItemView==null view"+view.findViewById(item.getItemId())); Log.wtf("d","menuItemView==null getAc"+getActivity().findViewById(item.getItemId())); //final View searchItemView = getView().findViewById(R.id.action_search); //popup = new PopupMenu(getActivity(), searchItemView); } popup = new PopupMenu(getActivity(), menuItemView); Menu menu = popup.getMenu(); addSortMenuItems(menu); popup.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { onSortMenuItemClick(item); return true; } }); popup.show(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.issues_list_menu, menu); super.onCreateOptionsMenu(menu, inflater); } 

console output (assert):

07-08 14: 08: 16.659: A / d (1677): item getitemid2131165600 07-08

14: 08: 16.659: A / d (1677): menuItemView == null viewnull 07-08

14: 08: 16.663: A / d (1677): menuItemView == null getAcnull

I have not forgotten setHasOptionsMenu (true); in onCreateView () and view is the bloated layout from onCreateView()

+4
source share
2 answers

Ok, I found the solution in the xml menu file in the element we want to add a popup, we need to install

 android:showAsAction="always" 

becouse popup only works on icons in the action bar, not on the menu. Also use getActivity (). FindView ... not getView (). FindView ...

+13
source

You can change

final View menuItemView = getView().findViewById(item.getItemId());

in

final View menuItemView = getActivity().findViewById(item.getItemId());

0
source

Source: https://habr.com/ru/post/1233918/


All Articles