java - 如何在 fragment 中添加菜单?

标签 java android android-fragments menu

当我使用 fragment 时,我没有在 ActionBar 中获得菜单。尽管实现了 onCreateOptionsMenu() 方法,但我不知道代码的问题在哪里。这是我正在使用的代码:

public class LesAvis extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    View rootView = inflater.inflate(R.layout.avis, container,false);
    ListView listeAvis = (ListView) rootView.findViewById(R.id.listView);
    return rootView;

}

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

}

但是,当我使用这部分代码实现 onCreateOptionsMenu() 方法时,我得到了我想要的(操作栏中的菜单):

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.add("Compte")
    .setIcon(R.drawable.ic_compte)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    menu.add("Compte")
    .setIcon(R.drawable.ic_historique)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    menu.add("Compte")
    .setIcon(R.drawable.ic_param)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}

最佳答案

要为每个 fragment 添加一个菜单,您应该经过许多步骤:

1) 首先,在 fragment 的 onCreateView() 中添加 setHasOptionsMenu(true),如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    ....
}

2) 重写 fragment 的 onCreateOptionsMenu() 方法如下:

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

3) 像这样覆盖 Activity 的 onOptionsItemSelected() 方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    Intent i;
    switch (item.getItemId()) {
        case R.id.action_param:
            i = new Intent(this, Settings.class);
            startActivity(i);
            return true;

        case R.id.action_history:
            i = new Intent(this, HistoryMenu.class);
            startActivity(i);
            return true;
    }
    return onOptionsItemSelected(item);
}

4) 不要覆盖 fragment 的 onOptionsItemSelected(),也不要覆盖 Activity 的 onCreateOptionsMenu()。

关于java - 如何在 fragment 中添加菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922950/

相关文章:

java - 按水平顺序展开单元格?

java - 将 Intent 发送到异步任务

android - 重新选择选项卡时 fragment 为空白

android - 无法找到 Xamarin Android 的 PixelFormat 枚举

android - 在YouTube Android应用中打开YouTube链接

安卓谷歌地图圆形

java - 当ListView的Item被选中时如何关闭抽屉导航?

java - 我如何初始化通用数组

java - 禁用 jconsole 弹出窗口 : "Secure connection failed. Retry insecurely?"

java - 为什么我必须添加父 pom 的依赖项?