2012-04-24 15 views
34

Estoy creando una aplicación con OptionsMenu. Encontré algunos ejemplos con él, pero todos están usando un lugar diferente donde llamar al super.onCreateOptionMenu() en el método onCreateOptionsMenu().onCreateOptionsMenu() llamando al super

Lista de diferentes maneras:

@Override // without super 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mymenu, menu); 
    return true; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mymenu, menu); 
    return true; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mymenu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

¿Qué debo usar?

Respuesta

29

Depende de lo que quieras hacer. El primer ejemplo colocará su menú y solo su menú. El segundo, agregará el primer menú de super clase. El último agregará su menú primero. Sin embargo, tenga en cuenta que los menús también tienen un campo de pedido, que se tendrá en cuenta en el momento del procesamiento.

Digamos que está ampliando una actividad que ya tiene un menú, pero no desea que aparezca ese menú sino otro. En ese caso, usarías el primer acercamiento.

Otro ejemplo: está ampliando una actividad que tiene un menú y desea agregar otro menú. En ese caso, podría usar el segundo o último enfoque.

3

La fuente de onCreateOptionsMenu() es el siguiente:

public boolean onCreateOptionsMenu(Menu menu) { 
    if (mParent != null) { 
     return mParent.onCreateOptionsMenu(menu); 
    } 
    return true; 
} 

Dónde mParent es la actividad principal de la actividad actual. Si su actividad se extiende al android.app.Activity, puede simplemente devolver true al final y no preocuparse por llamar al super, ya que la implementación predeterminada intentará mostrar un menú basado en la actividad principal, que probablemente no desee.

Cuestiones relacionadas