android - sirven - onCreateOptionsMenu dentro de los fragmentos
pasar de un fragment a otro android studio (5)
Intenté 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:
Agregue setSupportActionBar (barra de herramientas) en mi actividad, de esta manera:
@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.
He colocado setHasOptionsMenu(true)
dentro de onCreateView
, pero todavía no puedo invocar onCreateOptionsMenu
dentro de los fragmentos.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
A continuación 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)
de tipo Fragment debe anular o implementar un método de supertipo.
Llamada
setSupportActionBar(toolbar)
dentro
onViewCreated(...)
de 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);
}
Ya tiene el archivo autogenerado res / menu / menu.xml que define action_settings .
En su MainActivity.java, tenga 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 agrega 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 definiendo action_1 y action_2 .
De esta forma, cuando su aplicación muestre el Fragmento, su menú contendrá 3 entradas:
- action_1 desde res / menu / fragment_menu.xml
- action_2 desde res / menu / fragment_menu.xml
- action_settings desde res / menu / menu.xml
prueba esto,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
Y en onCreate
agrega esta línea para que las opciones aparezcan en tu 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);
}