studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android oncreateoptionsmenu

para - manual de programacion android pdf



onCreateOptionsMenu nunca se llama (9)

Tengo problemas para obtener un menú de opciones que funcione en Android. Construí aplicaciones antes, y todas funcionaron bien, pero ahora el menú simplemente no aparece.

El código:

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

el método completo ni siquiera se llama (se verifica configurando un punto de interrupción). La actividad es súper simple, solo tiene una VideoView , con un conjunto OnTouchListener .

Estoy usando Android 4.0.4 en un Samsung Galaxy 10.1, API de nivel 15, minSDK 15. ¿Me falta algo?


En el método: Fragment#onCreateView(...) debes poner:

setHasOptionsMenu(true);

Entonces se llamará a su método.


En las últimas versiones de Android cuando se utiliza la biblioteca compat para la barra de herramientas, es muy común que esto suceda, para que los elementos del menú se muestren en la barra de herramientas debe hacer lo siguiente:

mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false);


Estaba teniendo el mismo problema (menú que no aparece, onCreateOptionsMenu no se llama).

Si está llamando esto dentro de un fragmento, debe anular public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) no public boolean onCreateOptionsMenu(Menu menu) . Fragments no usan este último, por lo que nunca lo llamarán.

Menú de actividades

Menú Fragmento


Llame a la función onCreate desde onCreate primero. El onCreateOptionsMenu se llamará automáticamente.


Prueba esto. Funciona para mí: ---

@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.home_page_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_delete: Toast.makeText(this, "You pressed the Delete!", Toast.LENGTH_LONG).show(); break; case R.id.menu_setting: Intent intent=new Intent(HomePage.this,Setting.class); startActivity(intent); finish(); Toast.makeText(this, "You pressed the Setting!", Toast.LENGTH_LONG).show(); break; } return super.onOptionsItemSelected(item); }


Si el teléfono en el que realiza la prueba tiene un botón de menú en CrearOpciones, no se llamará a Mené al comenzar con el tema:

android:theme="@android:style/Theme.Black.NoTitleBar"

Pero cuando haces clic en el botón de menú, se onCreateOptionsMenu a onCreateOptionsMenu . No sé lo que sucede en los teléfonos sin botones de hardware ...


Tal vez también haya reemplazado el método de encendido y apagado y siempre haya hecho que sea verdadero . Devolver verdadero significa que se impedirá que keyEvent se propague más. Vea el código a continuación:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { /* handling event */ return true; //onCreateOptionsMenu won''t be invoked. }


Tuve el mismo problema. Mi problema fue resuelto por la herencia de una clase de actividad diferente.

Así que lo he estado haciendo:

la clase pública WelcomeActivity extends Activity

pero cambió esto a:

la clase pública WelcomeActivity extends AppCompatActivity

De esta manera estaba diciendo que digamos que se puede agregar una barra de acción a su actividad.


Tuve un problema similar, pero estoy compartiendo una solución diferente con la comunidad (ya que tardé una hora en comprender lo que estaba sucediendo):

abstract class BaseActivity : AppCompatActivity{ override fun onCreate(savedInstanceState: Bundle?) { setSupportActionBar(my_toolbar) } } class MyActivity : BaseActivity{ // TODO : some good stuff }

donde my_toolbar es un objeto creado en mi archivo xml a través de dataBinding.

El problema es el mismo, no aparece la barra de herramientas, no hay llamadas a onCreateOptionsMenu.

Mi solución fue promover este código para la clase hija y no para esa básica, ya que my_toolbar solo se inicializa a medida que se crea la clase hija.