El oyente onClick de la barra de acciones para el botón Inicio

84

¿Cómo puedo implementar una costumbre onClickListenerpara el botón Inicio de la barra de acción?

Ya hice un getSupportActionBar().setDisplayHomeAsUpEnabled(true);y ahora quiero redirigir al usuario a una determinada actividad en caso de que se haga clic en el botón Inicio.

Lo intenté con:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

pero nunca entra en el onMenuItemClick.

Básicamente, se hace como en este enlace pero aún no entra en el oyente.

noloman
fuente

Respuestas:

112

si alguien más necesita la solución

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}
Saad Mahmud
fuente
esto debería ser una solución. gran respuesta
jemsnaban
3
Trabajó para mí conreturn true;
Rick
1
Ponga un return true;al final del ifbloque, entonces es correcto
androidguy
2
Este enfoque no funciona para el botón Inicio / Atrás con el icono de flecha.
Trancer
111

Yo uso actionBarSherlock , después de que establezcamos supportActionBar.setHomeButtonEnabled(true);
podemos anular el método onMenuItemSelected:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

Espero que esto funcione para ti ~~~ buena suerte

lynn8570
fuente
4
No me funciona a mí. No se puede anular onMenuItemSelected como su final.
Aritra Roy
Con las anotaciones de Android, simplemente use @OptionsItem (android.R.id.home) public void yourMethod () {}
Italo Borssatto
23

si usamos la barra de acción dada por el sistema, el siguiente código funciona bien

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}
raju
fuente
7

Corregido: no es necesario utilizar un setOnMenuItemClickListener. Con solo presionar el botón, crea y lanza la actividad a través de la intención.

¡Muchas gracias a todos por vuestra ayuda!

noloman
fuente
Derecha, la barra de acción se encarga de los oyentes del menú y las llamadas onOptionsItemSelected()automáticamente. No es necesario instalarlo manualmente (eso en realidad puede romper cosas).
Nikolay Elenkov
5

responde en la mitad de lo que está sucediendo. si onOptionsItemSelectedno, el homeAsUpbotón de control cuando la actividad principal se establece en el sistema manifest.xml va a la actividad principal. usar así en la etiqueta de actividad:

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>
David
fuente
3

Debe habilitar explícitamente la acción de inicio si se ejecuta en ICS. De los documentos :

Nota: Si está utilizando el ícono para navegar a la actividad de inicio, tenga en cuenta que, a partir de Android 4.0 (API nivel 14), debe habilitar explícitamente el ícono como un elemento de acción llamando a setHomeButtonEnabled (verdadero) (en versiones anteriores, el El icono estaba habilitado como elemento de acción de forma predeterminada).

Nikolay Elenkov
fuente
3
Ya hice un getSupportActionBar().setDisplayHomeAsUpEnabled(true);y ungetSupportActionBar().setHomeButtonEnabled(true);
noloman
2

La mejor manera de personalizar la barra de acción enClickListener es onSupportNavigateUp ()

Este código será un enlace útil para ayudar al código

Naeem Ibrahim
fuente
-4

debe eliminar su Override onOptionsItemSelected y reemplazar su onCreateOptionsMenu con este código

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
        menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
        return true;

    }
Soha Soha
fuente
1
Agregue algunas explicaciones para ayudar a las personas a comprender y volver (¿volver?) A leer las políticas de stackoverflow sobre la respuesta con solo código.
N0un