android - 如何在 Android Fragments 中添加操作栏选项菜单

标签 android android-fragments android-actionbar android-optionsmenu

我正在尝试在 Android Fragments 中设置选项菜单。 ActionBar 选项菜单未显示在我的 fragment 中。

这是我的代码,我同时拥有 onCreateOptionsMenu()onOptionSelected() 函数。我的代码没有显示任何错误。但是选项菜单没有显示。

package org.reachout;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import org.general.R;

public class ViewMessageFragment extends Fragment {

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (container == null) {
            // We have different layouts, and in one of them this
            // fragment's containing frame doesn't exist.  The fragment
            // may still be created from its saved state, but there is
            // no reason to try to create its view hierarchy because it
            // won't be displayed.  Note this is not needed -- we could
            // just run the code below, where we would create and return
            // the view hierarchy; it would just never be used.
            return null;
        }
        return (LinearLayout)inflater.inflate(R.layout.viewmessages_tab_fragment_layout, container, false);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.askexperts_menu, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       // handle item selection
       switch (item.getItemId()) {
          case R.id.action_settings:
             // do s.th.
             return true;
          default:
             return super.onOptionsItemSelected(item);
       }
    }   

}

最佳答案

你需要在onCreate()中调用setHasOptionsMenu(true)

为了向后兼容,最好将此调用尽可能晚地放置在 onCreate() 的末尾,或者甚至稍后放置在 onActivityCreated() 或类似的地方。

见:https://developer.android.com/reference/android/app/Fragment.html#setHasOptionsMenu(boolean)

关于android - 如何在 Android Fragments 中添加操作栏选项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18714322/

相关文章:

android - 在 Android 应用程序中获取行驶速度

android - 我的查询工作不正确

android - 阻止 FragmentStatePagerAdapter 在下一个或上一个滑动 viewpager 时创建新 fragment

android - 没有对 onOptionsMenuClosed() 的回调。并在覆盖 onPanelClosed() 函数时出错

java - 这通常是 Java 接口(interface)用于设置事件处理程序的方式吗?这种方法是否存在隐藏的缺点?

android - 当 anyDensity ="false"时,菜单列表超出屏幕

java - 如何通过单击 fragment xml 文件上的按钮从 fragment java 文件打开新的 Activity?

java - 动态设置 EditTextPreference 标题

android - 如何在 Android API 7 上使用或解决 searchManager.getSearchableInfo()?

java - 如何在 Android Honeycomb 的操作栏中添加第二个下拉列表?