打开弹出菜单而不是默认操作栏菜单

时间:2018-11-27 10:52:54

标签: android popup android-actionbar popupmenu

由于我不能阻止选择一个项目后关闭默认操作栏菜单,因此我想到了使用popupmenu。 我想将弹出菜单与android操作栏菜单的布局相同使用,所以这是我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" xmlns:app="http://schemas.android.com/apk/res-auto">

<group android:id="@+id/grp_filtro_selezione" android:checkableBehavior="all">
    <item android:id="@+id/menu_all"
        android:src="@drawable/ic_settings"
        android:title="@string/all_menu"
        android:checked="true"/>
    <item android:id="@+id/menu_aule"
        android:src="@drawable/ic_settings"
        android:title="@string/aule_menu"
        android:checked="false"/>
    <item android:id="@+id/menu_aule_studio"
        android:src="@drawable/ic_settings"
        android:title="@string/aule_studio_menu"
        android:checked="false"/>
</group>
</menu>

我不知道如何将弹出菜单用于类似这样的东西:

 PopupMenu popup = new PopupMenu(MainActivity.this, v);
 popup.getMenuInflater().inflate(R.menu.pop_up, popup.getMenu());

并禁用默认操作栏菜单。

我认为我应该使用onCreateOptionsMenu()

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.mymenu, menu);

}

但是我该如何为弹出菜单充气呢?

编辑:

我几乎找到了解决方案,但是我有一个问题。因此,我所做的是在onCreateOptionsMenu中,我打开了一个仅包含操作栏图标的菜单:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.prova_menu, menu);
}

在onOptionsItemSelected中,我尝试了以下方法:

switch (item.getItemId()) {
        case R.id.settings:
            View menuItemView = getActivity().findViewById(R.id.settings); 
            popupMenu = new PopupMenu(getActivity(), menuItemView);
            popupMenu.inflate(R.menu.prova2);
            popupMenu.show();
}

它工作正常,但是有问题。我正在显示的弹出菜单具有可选项目。当我再次单击该图标以打开菜单时,所有项目都会重置,这可能是因为每次显示弹出菜单时都会膨胀菜单布局。 我尝试只在onCreateOptionsMenu中弹出菜单一次,但是在调用popupMenu.show()时出现此错误。

 MenuPopupHelper cannot be used without an anchor

2 个答案:

答案 0 :(得分:0)

我认为您最有可能使用onCreateOptionsMenu而不是onCreateContextMenu

在菜单上查看API descriptionTraining Guide

答案 1 :(得分:0)

您是否缺少对popup.show()的呼叫?

相关问题