2016-09-06 2 views
1

Я хочу добавить PopupMenu в мой MenuItem.MenuPopupHelper нельзя использовать без привязки

menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/date" 
     app:showAsAction="ifRoom|withText" 
     android:title="Date" 
     android:visible="true"/> 
    <item 
     android:id="@+id/category" 
     app:showAsAction="ifRoom|withText" 
     android:title="Category" 
     android:visible="true"/> 
</menu> 

Когда я нажимаю на MenuItem я называю этот код:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.filter_action) { 
     showPopup(item.getActionView()); 
    } 
    return super.onOptionsItemSelected(item); 
} 

private void showPopup(View v) { 
    PopupMenu popup = new PopupMenu(getActivity(), v); 
    MenuInflater inflater = popup.getMenuInflater(); 
    inflater.inflate(R.menu.filter_billing_menu, popup.getMenu()); 
    popup.show(); 
} 

И я получаю это исключение:

java.lang.IllegalStateException: MenuPopupHelper cannot be used without an anchor 

Как я могу исправить Это?

+1

1. Вы называете PopupMenu от деятельности или фрагмента? 2. Является ли эта кнопка меню видимой на экране? –

+0

@ DanilOnyanov в фрагменте – Artem

+1

Вы проверили этот вопрос http://stackoverflow.com/questions/23539792/android-can-not-use-popup-in-fragment? –

ответ

6

Я читаю "Интернет", и я пытаюсь этот код:

showPopu(getActivity().findViewById(R.id.filter_action)); 

Вместо

showPopup(item.getActionView()); 

Это работает для меня

+0

Nice ответ работа – R2R

1

Измените ваш этот код:

app:showAsAction="ifRoom|withText" 

к этому:

android:showAsAction="ifRoom|withText" 
+0

@ не работает для меня – Artem

+0

@ArtemShevchenko посмотрите мой ответ на вопрос и попробуйте. – Ironman

+0

не работает ((( – Artem

11

Я считаю, что лучшим (и более простым) подходом в этом случае было бы определение подменю вместо создания PopupMenu.

Например:

<item android:id="@+id/menu" 
    android:title="menu" > 
    <menu> 
     <item android:id="@+id/item_in_submenu_1" 
       android:title="subitem1" /> 
     <item android:id="@+id/item_in_submenu_2" 
       android:title="subitem2" /> 
    </menu> 
</item> 
Смежные вопросы