我已经把setHasOptionsMenu(true)
内onCreateView
,但我还是不能叫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));
}
该错误消息我得到:
该方法onCreateOptionsMenu(Menu)
类型片段的必须重写或实现的超类型方法。
试试这个,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
而在onCreate
中加入这一行,使选项出现在你的Toolbar
setHasOptionsMenu(true);
你已经拥有了自动生成的文件RES /菜单/ menu.xml文件定义action_settings。
在您的MainActivity.java有以下几种方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
// do stuff, like showing settings fragment
return true;
}
return super.onOptionsItemSelected(item); // important line
}
在onCreateView()
的调用片段的方法:
setHasOptionsMenu(true);
还可以添加这2种方法:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_1:
// do stuff
return true;
case R.id.action_2:
// do more stuff
return true;
}
return false;
}
最后,添加新的文件RES /菜单/ fragment_menu.xml定义ACTION_1和ACTION_2。
当您的应用程序显示片段这样一来,它的菜单将会包含3项:
- 从RES /菜单/ fragment_menu.xml ACTION_1
- 从RES /菜单/ fragment_menu.xml ACTION_2
- 从RES /菜单/ menu.xml文件 action_settings
我试过@Alexander法伯和@Sino拉吉答案。 这两个答案都不错,但我不能用我的onCreateOptionsMenu里面的片段,直到我发现少了什么:
在我的活动添加setSupportActionBar(工具栏),就像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
我希望这个答案可能是有人用同样的问题很有帮助。
呼叫
setSupportActionBar(toolbar)
内
onViewCreated(...)
片段的
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
((MainActivity)getActivity()).setSupportActionBar(toolbar);
setHasOptionsMenu(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);
}