如何在碎片中添加菜单?

6

当我使用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);
}
3个回答

17

为每个片段添加菜单,您需要执行许多步骤:

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

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

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

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

3)像这样覆盖活动的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) 不要覆盖片段的onOptionsItemSelected()方法,也不要覆盖活动的onCreateOptionsMenu()方法。


0
我认为在创建Fragment时,您需要添加以下行:setHasOptionsMenu(true);

0

应该在 onCreate() 方法中调用 setHasOptionsMenu(true),而不是在 onCreateView() 中。


在Fragment(而不是Activity)的onCreate()方法中,你是否调用了setHasOptionsMenu(true)?Fragment也有onCreate()方法,但或许你已经知道了。尝试将onCreateOptionsMenu()添加到Activity中,并在Fragments中使用onPrepareOptionsMenu()。 - Jerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接