我是 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/