碎片内的onCreateOptionsMenu

我已经在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)); } 

我得到的错误消息:

types为Fragment的onCreateOptionsMenu(Menu)方法必须覆盖或实现超types方法。

尝试这个,

 @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 / 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 } 

在Fragment调用的onCreateView()方法中:

 setHasOptionsMenu(true); 

并添加这两种方法:

 @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; } 

最后,添加定义action_1action_2的新文件res / menu / fragment_menu.xml

这样,当你的应用程序显示片段时,其菜单将包含3个条目:

  • 来自res / menu / fragment_menu.xml的 action_1
  • res / menu / fragment_menu.xml中的 action_2
  • 来自res / menu / menu.xml的 action_settings

我尝试了@Alexander Farber和@Sino Raj的答案。 两个答案都很好,但我不能使用我的片段中的onCreateOptionsMenu,直到我发现什么是缺less的:

在我的Activity中添加setSupportActionBar(工具栏),如下所示:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.id.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); } 

我希望这个答案可以帮助有同样问题的人。

  @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); }