'onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater)' in 'androidx.fragment.app.Fragment' cannot be applied to '(android.view.Menu)
时间: 2024-03-09 16:51:36 浏览: 13
这个错误是因为你在Fragment中重写了onCreateOptionsMenu方法时,没有正确地调用父类的方法。正确的方法应该是在重写方法中调用super.onCreateOptionsMenu(menu, inflater)。
示例代码:
```
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// 添加菜单项
inflater.inflate(R.menu.fragment_menu, menu);
}
```
相关问题
如何在androidx.appcompat.widget.Toolbar右侧加入分享按钮
你可以通过在Toolbar布局文件中加入一个Menu来添加分享按钮。具体步骤如下:
1.在res/menu目录下创建一个menu资源文件,比如说命名为toolbar_menu.xml。
2.在这个文件中添加一个item,设置它的id为share,title为分享。
```
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/share"
android:title="分享"
android:icon="@drawable/ic_share"
android:showAsAction="always" />
</menu>
```
3.在Toolbar布局文件中添加一个menu属性,值为刚才创建的menu资源文件的id。
```
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="标题"
app:menu="@menu/toolbar_menu" />
```
4.在Activity或者Fragment中重写onCreateOptionsMenu方法,通过调用Toolbar的inflateMenu方法来加载menu资源文件。
```
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.toolbar_menu, menu);
}
```
5.在Activity或者Fragment中重写onOptionsItemSelected方法,通过判断点击的menu item的id来实现相应的操作。比如,点击分享按钮后可以弹出一个分享对话框。
```
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.share:
//弹出分享对话框
return true;
default:
return super.onOptionsItemSelected(item);
}
}
```
这样就可以在Toolbar右侧加入分享按钮了。
要改变安卓系统OptionsMenu默认弹窗宽度 不是popmenu,menu是android.support.v7.view.menu
修改安卓系统OptionsMenu默认弹窗宽度的方法与我之前提供的方法类似,只需要将MenuPopupHelper替换为MenuPopupHelperICS即可。
以下是示例代码:
```java
public void setMenuWidth(MenuBuilder menu, int width) {
try {
Field field = menu.getClass().getDeclaredField("mMenuView");
field.setAccessible(true);
Object menuView = field.get(menu);
Class<?> cls = menuView.getClass();
Method method = cls.getDeclaredMethod("getWidth");
int oldWidth = (int) method.invoke(menuView);
if (oldWidth != width) {
method = cls.getDeclaredMethod("setWidth", int.class);
method.invoke(menuView, width);
}
} catch (Exception e) {
e.printStackTrace();
}
}
```
使用时,你可以将上述代码放在`onCreateOptionsMenu`方法中,然后调用`setMenuWidth`方法即可修改OptionsMenu默认弹窗宽度。例如:
```java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
setMenuWidth((MenuBuilder)menu, 500); // 修改宽度为500
return true;
}
```