Listener onClick della barra delle azioni per il pulsante Home


85

Come posso implementare una personalizzazione onClickListenerper il pulsante Home della barra delle azioni?

Ho già fatto getSupportActionBar().setDisplayHomeAsUpEnabled(true);e ora voglio reindirizzare l'utente a una determinata attività nel caso in cui venga cliccato il pulsante Home.

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

ma non entra mai in onMenuItemClick.

Fondamentalmente, è fatto proprio come in questo link, ma ancora non entra nell'ascoltatore.

Risposte:


113

se qualcun altro ha bisogno della soluzione

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

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

    return super.onOptionsItemSelected(item);
}

questa dovrebbe essere una soluzione. ottima risposta
jemsnaban

3
Ha funzionato per me conreturn true;
Rick il

1
Metti un return true;alla fine del ifblocco, quindi è corretto
androidguy

2
Questo approccio non funziona per il pulsante Home / Indietro con l'icona della freccia.
Trancer

111

Uso actionBarSherlock , dopo aver impostato supportActionBar.setHomeButtonEnabled(true);
possiamo sovrascrivere il metodo 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;
}

Spero che questo lavoro per te ~~~ buona fortuna


4
Non mi funziona io. Impossibile eseguire l'override di onMenuItemSelected come finale.
Aritra Roy

Con le annotazioni Android basta usare @OptionsItem (android.R.id.home) public void yourMethod () {}
Italo Borssatto

23

se usiamo la barra delle azioni data dal sistema il seguente codice funziona bene

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

Risolto: non è necessario utilizzare un file setOnMenuItemClickListener. Basta premere il pulsante, crea e avvia l'attività attraverso l'intento.

Grazie mille a tutti per il vostro aiuto!


A destra, la barra delle azioni si prende cura degli ascoltatori del menu e delle chiamate onOptionsItemSelected()automaticamente. Non è necessario installare manualmente (ciò può effettivamente rompere le cose).
Nikolay Elenkov

5

risponde a metà di quanto sta accadendo. in caso onOptionsItemSelectedcontrario, il homeAsUppulsante di controllo quando l'attività principale viene impostata nel sistema manifest.xml passa all'attività principale. utilizzare in questo modo nel tag attività:

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

3

È necessario abilitare esplicitamente l'azione home se in esecuzione su ICS. Dai documenti :

Nota: se stai utilizzando l'icona per navigare verso l'attività domestica, fai attenzione che a partire da Android 4.0 (livello API 14), devi abilitare esplicitamente l'icona come elemento di azione chiamando setHomeButtonEnabled (true) (nelle versioni precedenti, il l'icona è stata abilitata come elemento di azione per impostazione predefinita).


3
Ho già fatto un getSupportActionBar().setDisplayHomeAsUpEnabled(true);e ungetSupportActionBar().setHomeButtonEnabled(true);
noloman il


-4

dovresti eliminare il tuo Override onOptionsItemSelected e sostituire il tuo onCreateOptionsMenu con questo codice

@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
Si prega di aggiungere alcune spiegazioni per aiutare le persone a capire e tornare (indietro?) A leggere le politiche di stackoverflow sulla risposta con il solo codice.
N0un
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.