2016-09-06 332 views
1

我想將PopupMenu添加到我的MenuItemMenuPopupHelper不能在沒有錨的情況下使用

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 answer working – 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> 
相關問題