android - example - AppCompat v7 Toolbar onOptionsItemSelected no llamado
toolbar android example (6)
Cambié de ActionBar original a la barra de herramientas de AppCompat y setSupportActionBar (barra de herramientas). Cuando estoy usando getSupportActionBar () y setDisplayHomeAsUpEnabled (true) para la flecha de retroceso, el clic nunca llama onOptionsItemSelected o cualquier otro método de escucha.
¿Debo implementar algún oyente especial para ello? Antes de que todo estuviera funcionando bien.
EDITAR: Inicializa la barra de acciones:
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mActionBar = getSupportActionBar();
mActionBar.setHomeButtonEnabled(true);
y después de reemplazar el contenido con un Fragmento, hago esto:
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mActionBar.setDisplayHomeAsUpEnabled(true);
En mi caso, el setHasOptionsMenu(true);
no fue habilitado en onCreateView
. Espero que esto ayude a alguien.
Sé que esta pregunta ha sido respondida pero encontré la verdadera causa del problema después de 2 días de frustración.
Eche un vistazo a la documentación de ActionBarDrawerToggle: https://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html
Observe los dos constructores allí. Mi error fue que estaba usando el segundo constructor que estaba tomando una barra de herramientas como parámetro. Me tomó tanto tiempo darme cuenta de la última línea en la documentación del consturctor: " Utilice ActionBarDrawerToggle (Activity, DrawerLayout, int, int) si está configurando la barra de herramientas como la barra de acciones de su actividad ".
Después de usar el primer constructor onOptionsItemSelected () se invocó sin problemas.
No se olvide de llamar a ActionBarDrawerToggle.onConfigurationChanged () y onOptionsItemSelected () de su actividad como se describe en la última parte aquí: http://developer.android.com/training/implementing-navigation/nav-drawer.html
Si ha intentado todo y simplemente no funciona, puede implementar su propio oyente de clics de esta forma:
myNavList.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = myNavList.getItemAtPosition(position).toString();
Toast.makeText(this, "You selected " + item, Toast.LENGTH_SHORT).show();
}
});
Tuve que implementar OnClickListener para el DrawerToggle:
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popStackIfNeeded();
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
mActionBar.setDisplayHomeAsUpEnabled(false);
mDrawerToggle.setDrawerIndicatorEnabled(true);
}
});
esto solucionó mi problema.
Tuve varios problemas al utilizar el método setSupportActionBar (). También ignora ciertos temas de color, por lo que no puede aplicar un estilo a la flecha hacia atrás o al icono de desbordamiento (no recuerdo cuál). Acabo de eliminar la integración de ActionBar y usar la barra de herramientas de forma nativa. Entonces, como alternativa, podrías hacer eso de la siguiente manera.
Simplemente incluya la barra de herramientas como lo haría normalmente, en su diseño, suponga que está usando una identificación de @ + id / barra de herramientas.
Luego, en el código:
_toolbar = (Toolbar) findViewById(R.id.toolbar);
_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleNavButtonPress();
}
});
_toolbar.setOnMenuItemClickListener(_menuItemClickListener);
_toolbar.inflateMenu(R.menu.message_list_menu);
Menu menu = _toolbar.getMenu();
En este caso, _menuItemClickListener puede ser literalmente su método actual onOptionsItemSelected () renombrado. Simplemente no tiene que verificar que el menú sea nulo.
Para eliminar elementos del menú, simplemente llame al menú-> borrar (). Entonces, en mi onPause
, onPause
los menús y en Reesume, los inflo, en mis fragmentos, y cada fragmento establece el manejador de clics en Reanudar. Siempre debe limpiar, porque Android no lo hará por usted en este enfoque, y la barra de herramientas seguirá agregando menús cada vez que se infle.
Una última nota, para que todo funcione, debes desactivar la barra de acción por completo y eliminarla del estilo.
Una cosa que no fue mencionada:
Si construye dinámicamente el menú de opciones en onCreateOptionsMenu y devuelve null allí, el botón arriba de la barra de acciones no funcionará.
Funciona bien si devuelve el parámetro de menú sin agregar nada en él.
Probado en emulador API 19