【问题标题】:public boolean OnCreateOptionMenu in Fragment片段中的公共布尔 OnCreateOptionMenu
【发布时间】:2015-08-27 14:24:24
【问题描述】:

我正在尝试使用片段实现this library。为了完成这个实现,我必须重写这个方法

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    return true;
}

但是当我尝试覆盖此方法时,它会给出错误“方法不会覆盖其超类中的方法”。

我也在这里搜索过,但对我没有任何帮助。请帮忙。

我的代码如下

public class Fragment_Dashboard_Trains extends Fragment implements OnClickListener,OnMenuItemClickListener {@Override
public void onMenuItemClick(View clickedView, int position) {
    Toast.makeText(getActivity(), "Clicked on position: " + position, Toast.LENGTH_SHORT).show();
}@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

我正在使用 support.v4.app.fragment

【问题讨论】:

  • 发布您的片段代码。
  • 你在扩展什么类,你的相关导入是什么?

标签: android android-fragments android-menu


【解决方案1】:

在 onCreate 方法中添加setHasOptionsMenu(true);

喜欢:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

【讨论】:

  • fragment 没有 onCreateOptionsMenu(menu menu) 方法,或者这个包含 onCreateOptionsMenu(Menu menu, MenuInflater inflater) 方法,所以请使用这个
  • 是的,我注意到片段没有 onCreateOptionsMenu(menu menu) 方法,但没有任何方法可以使用片段实现这个库
【解决方案2】:

根据the docs,您尝试覆盖的方法的签名是:

public void onCreateOptionsMenu (Menu menu, MenuInflater inflater)

不是:

public void onCreateOptionsMenu (Menu menu)

尝试将您的实现替换为:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_main, menu);
    return;
}

【讨论】:

  • 现在显示“尝试使用不兼容的返回类型”
  • 但库需要布尔返回类型,如果您查看我在帖子中提到的链接。
  • @swappy 我确实查看了链接,但根本没有看到此方法的实现。此外,链接中的类扩展了DialogFragment,它具有签名public void onCreateOptionsMenu (Menu menu, MenuInflater inflater),正如我在答案中提到的(并发布了一个链接):developer.android.com/reference/android/app/…
  • 如果您坚持使用该名称和该签名实现一个方法,您将不得不删除 @Override 注释,因为编译器不会找到具有这样一个签名的方法来覆盖...
【解决方案3】:

我找到了我的解决方案。我只需要在我的基础活动中实现这个方法

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    return true;
}

点击菜单事件可以从片段中处理。

【讨论】:

  • 您可以以更好的方式做到这一点。使用 sethasmenu() 来创建片段,您可以为每个片段创建菜单
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多