java - fragment 内的菜单未被调用

标签 java android

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d("Does", "get called");
    inflater.inflate(R.menu.menuitem, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

下面是我调用的 onCreateView 方法

@Override
public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, Bundle savedInstanceState) {   
          setHasOptionsMenu(true);
          return inflater.inflate(R.layout.layout1, container, false);
}

我的操作栏中没有调用日志语句或菜单。

更新:我尝试从 fragment 的 onCreate 方法中调用它,但未显示菜单。

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

菜单.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/section" android:title="@string/section"
        android:icon="@drawable/ic_section"
        android:showAsAction="always" />

    <item android:id="@+id/refresh" android:title="@string/refresh" 
        android:icon="@drawable/ic_refresh"
        android:showAsAction="always" />

    <item android:id="@+id/edit_patient" android:title="@string/edit_patient" 
        android:icon="@drawable/ic_editpatient"
        android:showAsAction="always" />    

    <item android:id="@+id/about" android:title="@string/about"
        android:showAsAction="never" />

    <item android:id="@+id/help" android:title="@string/help"
        android:showAsAction="never" />

    <item android:id="@+id/signout" android:title="@string/signout"
        android:showAsAction="never" />

</menu>

最佳答案

您需要调用setHasOptionsMenu(true);来自 Fragment 的起始生命周期方法之一。最好来自 onCreate(...)

在极简情况下, fragment 的 onCreate 方法如下所示:

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

此外,在您扩充自定义菜单后调用 super.onCreateOptionsMenu(menu, inflater); 会将您刚刚扩充的菜单重置为空菜单。

所以要么调用:

@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d("Does", "get called");
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menuitem, menu);
}

或:

@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d("Does", "get called");
    //no super call
    inflater.inflate(R.menu.menuitem, menu);
}

此外,如果您在 Gingerbread 设备上进行测试,如果托管 Activity 不包含它自己的菜单项,则菜单可能不会显示。

关于java - fragment 内的菜单未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654793/

相关文章:

java - BufferedImage 的 getSubimage() 到底做了什么?

java - 覆盖非抽象方法是好的做法吗?

android - 如何限制谷歌云消息服务中的特定设备?

android - ConstraintLayout 中多个水平障碍的问题

android - Http 数据未显示在我的 TextView [android]

java - Volley jsonArray 传递

java - 如何更改JMeter的字体? (现在上部 i 与下部 L 相同)

java - SQLite 数据库中没有存储任何信息

java - 如何调试JBoss或PostgreSQL内存不足的问题?

java - 无法解析方法 setOnChildClickListener