如何在片段中添加菜单?

时间:2015-04-28 15:03:05

标签: java android android-fragments menu

当我使用片段时,我不会在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 个答案:

答案 0 :(得分:12)

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

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

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

2)覆盖片段的onCreateOptionsMenu()方法,如下所示:

@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);
}

3)覆盖活动的onOptionsItemSelected()方法,如下所示:

interface Foo {
    name?: string;
    [others: string]: Foo;
}

4)不要覆盖片段的onOptionsItemSelected(),也不要覆盖onCreateOptionsMenu()上的活动。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用setHasOptionsMenu(true)方法拨打onCreate(),而不是onCreateView()