72

¿Cómo puedo implementar un onClickListener personalizado para el botón Inicio de la barra de acciones?Oyente onClick de Action Bar para el botón Inicio

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.

he intentado 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 this link pero aún así no entra en el oyente.

Respuesta

7

Reparado: no es necesario utilizar un setOnMenuItemClickListener. Simplemente presionando el botón, crea y lanza la actividad a través de la intención.

Muchas gracias a todos por su ayuda!

+0

A la derecha, la barra de acciones se ocupa de las escuchas del menú y llama' onOptionsItemSelected() 'automáticamente. No es necesario instalarlo manualmente (eso puede realmente romper cosas). –

3

Debe habilitar explícitamente la acción local si se ejecuta en ICS. De the docs:

Nota: Si está utilizando el icono para navegar a la actividad en el hogar, cuidado de que comenzando con Android 4.0 (API nivel 14), debe habilitar explícitamente el icono como un elemento de acción por llamando al setHomeButtonEnabled (true) (en versiones anteriores, el icono se habilitó como un elemento de acción por defecto).

+3

Ya lo hice una 'getSupportActionBar() setDisplayHomeAsUpEnabled (true);'. y un 'getSupportActionBar().setHomeButtonEnabled (true); ' – noloman

107

uso el actionBarSherlock, después nos propusimos supportActionBar.setHomeButtonEnabled(true);
podemos reemplazar 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 este trabajo para usted ~~~ buena suerte

+3

+1 Esto también funciona para Native Action Bar. – Phil

+4

No me funciona. No se puede reemplazar onMenuItemSelected como su final. –

+0

Con las anotaciones de Android simplemente use @OptionsItem (android.R.id.home) public void yourMethod() {} –

20

si usamos el sistema dado acción barra 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; 
} 
87

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

esto debería ser una solución. gran respuesta – jemsnaban

+1

Funcionó para mí con 'return true;' – Rick

+0

Ponga un 'return true;' al final del bloque 'if', entonces es correcto – user3175580

2

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

Este código será útil link for helping code

1

respuestas a la mitad parte de lo que está sucediendo. si onOptionsItemSelected no controla el botón homeAsUp cuando la actividad principal se establece en el sistema manifest.xml va a actividad principal. uso de este tipo en la etiqueta de actividad:

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

usted debe eliminar su Invalidar onOptionsItemSelected y replate 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 entender e ir (¿de regreso?) Leyendo las políticas de stackoverflow sobre la respuesta con solo el código. – N0un

Cuestiones relacionadas