@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){
Log.d("Does", "get called");
inflater.inflate(R.menu.menuItem, menu);
super.onCreateOptionsMenu(menu,inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
getActivity().invalidateOptionsMenu();
MenuItem filter = menu.findItem(R.id.section);
filter.setVisible(false);
}
我正在尝试将我的菜单加载到片段中并获得借用,但onPrepareOptionsMenu
根本没有被调用,我需要隐藏一些菜单项。
更新
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
我在setHasOptionsMenu(true)
方法中调用onCreate()
。
答案 0 :(得分:20)
在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开。当事件发生并且您想要执行菜单更新时,必须调用invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu()。
http://developer.android.com/guide/topics/ui/menus.html
要更改特定项目的使用:menu.findItem(R.id.your_item_id)
答案 1 :(得分:7)
可能为时已晚,但我遇到了同样的问题,解决方案非常简单。 只需从片段中调用getActivity()。invalidateOptionsMenu()即可。 这将调用onPrepareOptionsMenu,您可以在这里控制项目的可见性,如下所示: menu.findItem(R.id.youritem).setVisible(真/假); 希望有所帮助!
答案 2 :(得分:7)
你需要做两件事。 第1步:在Fragment OnCreateView中添加setHasOptionsMenu(true);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setHasOptionsMenu(true);
return inflater.inflate(R.layout.fragment_user_settings, container, false);
}
第2步:你需要添加getActivity()。invalidateOptionsMenu();在OnViewCreated中的片段中。或者在更改片段时在mainActivity中。
答案 3 :(得分:0)
这适合我。
public class ContentFragment extends android.support.v4.app.Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.content_frame,container,false);
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.note_menu,menu);
super.onCreateOptionsMenu(menu, inflater);
}
}
答案 4 :(得分:0)
您必须通知系统您的应用栏片段正在参与选项菜单的填充。为此,在片段的 onCreate(Bundle) 方法中调用 setHasOptionsMenu(true)
参考。 https://developer.android.com/guide/fragments/appbar#activity-register