当前位置: 首页 > 面试题库 >

片段内的菜单未调用

史修明
2023-03-14
问题内容
@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);
}

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

更新 :我尝试从片段的onCreate方法调用此方法,但未显示菜单。

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

Menu.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(...)

在最简单的情况下,onCreateFragment 的方法如下所示:

@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不包含其自己的菜单项,则可能不会显示该菜单。



 类似资料:
  • 更新:我尝试从fragment的onCreate方法调用此命令,但是菜单没有显示出来。 menu.xml

  • P.P.S@Philipp Jahoda,我实现了onCreateOptionsMenu(...)在片段的托管活动中。

  • 问题内容: 我知道有人问过这个问题,但是我遵循了所有答案,但仍然有同样的问题。我有两个脚本,一个是片段管理器(IngredientsActivity),另一个是片段(OtherList)。代码如下 成分活动 其他清单 我发现有多个建议可以覆盖onSaveInstanceState的建议,并且我发现更多建议告诉我使用setRetainInstance。我不知道如果要保存列表的值,为什么setReta

  • 我有一个应用程序,得到了一个活动与2个碎片水平放置。 在我的活动中,我使用膨胀菜单,使用它我可以显示actionbar选项菜单。但是,当我试图从其中一个片段更新操作栏菜单项时,没有调用。因此,我无法更新操作栏选项菜单。

  • 假设有两个Fragments,X和Y。我在X上添加Y片段。当Y完成它的工作,然后删除,X再次可见。 问题:当Y片段被删除并且X再次可见时,我必须执行一些任务,但不会调用,因为它取决于活动。那么我怎么知道片段是可见的呢?

  • 我有一个片段,其中有recyclerview,并使用recyclerview适配器在这个recyclerview中设置数据。 现在,我在适配器的列表项中单击了一个按钮,我需要检查android中的READ\u EXTERNAL\u STORAGE权限,以查看android中的新权限模型。 我在这个适配器的片段中创建了一个新函数,用于检查是否授予了权限,如果尚未授予权限,则请求权限。 我已经通过了我