当我使用 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/