碎片内的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_1和action_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); }