我已经在onCreateView中放置了setHasOptionsMenu(true),但我仍然不能在片段中调用onCreateOptionsMenu。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
下面是我的onCreateOptionsMenu代码。
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.layout, menu);
return (super.onCreateOptionsMenu(menu));
}
我得到的错误消息:
Fragment类型的createoptionsmenu (Menu)方法必须重写或实现超类型方法。
设置setHasMenuOptions(true)工作,如果应用程序有一个主题与动作栏,如theme . materialcomponents . daynight . darkactionbar或Activity有它自己的工具栏,否则oncreateoptionmenufragment不会被调用。
如果你想使用独立的工具栏,你要么需要获得活动,并将工具栏设置为支持操作栏
(requireActivity() as? MainActivity)?.setSupportActionBar(toolbar)
它让你的fragment onCreateOptionsMenu被调用。
其他的选择是,你可以用Toolbar . inflatemmenu (r.m menu. your_menu)和项目监听器来膨胀你的工具栏自己的菜单
toolbar.setOnMenuItemClickListener {
// do something
true
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_add_customer, container, false);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}