onCreateOptionsMenu dentro de fragmentos
He colocado setHasOptionsMenu(true)
dentro de onCreateView
, pero todavía no puedo llamar onCreateOptionsMenu
dentro de fragmentos.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
Abajo está mi código onCreateOptionsMenu
.
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.layout, menu);
return (super.onCreateOptionsMenu(menu));
}
El mensaje de error que recibo:
El método
onCreateOptionsMenu(Menu)
del tipo Fragment debe anular o implementar un método supertipo.
5 answers
Prueba esto,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
Y en onCreate
agregue esta línea para hacer que las opciones aparezcan en su Toolbar
setHasOptionsMenu(true);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 21:17:05
Ya tiene el archivo autogenerado res/menu/menu.xml defining action_settings.
En su Actividad principal.java tiene los siguientes métodos:
@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
}
En el método onCreateView()
de tu llamada de fragmento:
setHasOptionsMenu(true);
Y también añadir estos 2 métodos:
@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;
}
Finalmente, agregue el nuevo archivo res/menu/fragment_menu.xml definir action_1 y action_2.
De esta manera, cuando la aplicación muestra el fragmento, su menú contendrá 3 entradas:
- action_1from res/menu/fragment_menu.xml
- action_2from res/menu/fragment_menu.xml
- action_settingsfrom res/menu/menu.xml
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-11 18:58:41
Probé las respuestas de @Alexander Farber y @Sino Raj. Ambas respuestas son agradables, pero no pude usar el onCreateOptionsMenu dentro de mi fragmento, hasta que descubrí lo que faltaba:
Agregar setSupportActionBar (barra de herramientas) en mi actividad, así:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
Espero que esta respuesta pueda ser útil para alguien con el mismo problema.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-27 00:18:22
Llamar
setSupportActionBar(toolbar)
Dentro
onViewCreated(...)
Del Fragmento
@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);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-30 04:21:49
@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);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-12 13:15:20