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.

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);
}

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


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;
}

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!


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>

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).


3
Ya hice un getSupportActionBar().setDisplayHomeAsUpEnabled(true);y ungetSupportActionBar().setHomeButtonEnabled(true);
noloman


-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;

    }

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.