我想在加载片段时加载另一个菜单xml。我在主要活动中使用此代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
我在片段中使用此代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
当用户加载片段时,活动菜单应该删除然后片段菜单应加载到操作栏。 当用户从片段中单击后退按钮时,应删除片段菜单,然后主要活动菜单应加载到操作栏。
现在这段代码没有删除旧菜单,它将新菜单添加到旧菜单附近。
我该怎么做?
答案 0 :(得分:4)
您可以使用 menu.clear();
方法。
它从菜单中删除所有现有项目,将其留空,就像刚刚创建它一样。
试试这个..
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
menu.clear(); // clears all menu items..
getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
答案 1 :(得分:1)
试试这个:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
super.onCreateOptionsMenu(menu,inflater);
}
希望有所帮助
答案 2 :(得分:0)
您应该在setHasOptionsMenu(true);
中调用 onCreateView
方法。
它告诉片段有菜单。
然后尝试以下代码...
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.fragment_manage, container, false);
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
menu.clear(); // clears all menu items..
inflater.inflate(R.menu.fragment_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}