java - 无法创建菜单

标签 java android menu

我是 android 的新手,试图创建一个弹出菜单,但是当我在扩展到 AppCompatActivity 的 Activity 中调用 createMenu() 时,我的应用程序崩溃了> 谁能帮我解决这个问题?

@SuppressLint("RestrictedApi")
    public void createMenu() {
        MenuBuilder menuBuilder = new MenuBuilder(this);
        MenuInflater inflater = new MenuInflater(this);
        inflater.inflate(R.menu.popup_menu, menuBuilder);
        MenuPopupHelper optionsMenu = new MenuPopupHelper(this, menuBuilder);
        optionsMenu.setForceShowIcon(true);
          menuBuilder.setCallback(new MenuBuilder.Callback() {
            @Override
            public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.one:
                        return true;
                    default:
                        return false;
                }
            }

            @Override
            public void onMenuModeChange(MenuBuilder menu) {

            }
        });
        optionsMenu.show();
}

在我的 XML 中

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

    <item
        android:id="@+id/one"
        android:icon="@drawable/ic_one"
        android:title="One"
        android:orderInCategory="0"/>
</menu>

调用它

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.option) {
            createMenu();
        }
}

获取错误

java.lang.IllegalStateException: MenuPopupHelper 不能在没有 anchor 的情况下使用

最佳答案

将此添加到菜单文件 android:showAsAction="always"

使用这个菜单文件

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

<item
    android:id="@+id/one"
    android:icon="@drawable/ic_one"
    android:title="One"
    android:showAsAction="always"
    android:orderInCategory="0"/>

问题是空操作 View 。所以将菜单项显示为操作 View 解决了这个问题

并使用这段代码调用它

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.option) {
        createMenu(item.getActionView());
    }

并将您的 createMenu() 更改为

@SuppressLint("RestrictedApi")
public void createMenu(View v) {
PopupMenu popup = new PopupMenu(getActivity(), v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.popup_menu, popup.getMenu());
popup.show();

}

关于java - 无法创建菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49968867/

相关文章:

java - 使用嵌入式 OSGi 容器

android - payload 4096字节是否包括registration_id长度?

java - 如何为 Android (java) 配置 Google Maps Distance Matrix API

html - 带有图像的 Div Css 菜单

css - 如何使下拉菜单宽度与选项卡大小相同?

html - 菜单列表项宽度拒绝更改?

java - 以不同的方法将操作附加到 Stream 是一种不好的做法吗?

java - Apache 星火 Mllib

java - Java 最终类中 protected 方法的用例是什么?

android - 根本不在 Android 中缓存 Firebase 数据库的特定部分