3 回答
TA贡献1871条经验 获得超8个赞
调用超级方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
super.onCreateOptionsMenu(menu, inflater);
}
将日志语句放在代码中以查看是否未调用该方法,或者您的代码是否未修改该菜单。
此外,还要确保您呼叫setHasOptionsMenu(boolean)的onCreate(Bundle)通知,它应该参与选项菜单处理的片段。
TA贡献1909条经验 获得超7个赞
我遇到了同样的问题,但我认为最好总结一下并介绍最后一步让它运转起来:
在Fragment的onCreate(Bundle savedInstanceState)方法中添加setHasOptionsMenu(true)方法。
onCreateOptionsMenu(Menu menu, MenuInflater inflater)在片段中覆盖(如果你想在Fragment的菜单中做一些不同的事情)和onOptionsItemSelected(MenuItem item)方法。
在onOptionsItemSelected(MenuItem item)Activity的方法中,确保在onOptionsItemSelected(MenuItem item)Fragment的方法中实现菜单项操作时返回false 。
一个例子:
活动
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Do Activity menu item stuff here
return true;
case R.id.fragment_menu_item:
// Not implemented here
return false;
default:
break;
}
return false;
}
分段
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
....
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Not implemented here
return false;
case R.id.fragment_menu_item:
// Do Fragment menu item stuff here
return true;
default:
break;
}
return false;
}
- 3 回答
- 0 关注
- 447 浏览
添加回答
举报