首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段内的菜单不被调用

片段内的菜单不被调用
EN

Stack Overflow用户
提问于 2013-03-27 08:48:27
回答 1查看 1.4K关注 0票数 1
代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d("Does", "get called");
    inflater.inflate(R.menu.menuitem, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

下面是我的onCreateView方法,我在这里调用

代码语言:javascript
复制
@Override
public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, Bundle savedInstanceState) {   
          setHasOptionsMenu(true);
          return inflater.inflate(R.layout.layout1, container, false);
}

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

Update:我尝试从片段的onCreate方法调用它,但是菜单没有显示。

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);        
}

Menu.xml

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 08:50:41

您需要从片段的起始生命周期方法中调用setHasOptionsMenu(true);。最好是在onCreate(...)内部。

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

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setHasOptionsMenu(true);
}

此外,在您打开自定义菜单后调用super.onCreateOptionsMenu(menu, inflater);将重新设置您刚刚充气到空菜单的菜单。

所以要么打电话:

代码语言:javascript
复制
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d("Does", "get called");
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menuitem, menu);
}

或者:

代码语言:javascript
复制
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d("Does", "get called");
    //no super call
    inflater.inflate(R.menu.menuitem, menu);
}

另外,如果在姜饼设备上进行测试,如果宿主Activity不包含自己的菜单项,则可能不会显示菜单。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15654793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档