OnClick-Listener der Aktionsleiste für die Home-Schaltfläche


84

Wie kann ich eine benutzerdefinierte onClickListenerSchaltfläche für die Home-Schaltfläche der Aktionsleiste implementieren ?

Ich habe bereits eine getSupportActionBar().setDisplayHomeAsUpEnabled(true);und jetzt möchte ich den Benutzer zu einer bestimmten Aktivität umleiten, falls auf die Home-Schaltfläche geklickt wird.

Ich habe versucht mit:

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

aber es tritt nie in die onMenuItemClick.

Grundsätzlich geschieht dies genau wie in diesem Link, aber es wird immer noch nicht in den Listener eingegeben.

Antworten:


112

wenn jemand anderes die Lösung braucht

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

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

    return super.onOptionsItemSelected(item);
}

Dies sollte eine Lösung sein. tolle Antwort
jemsnaban

3
Arbeitete für mich mitreturn true;
Rick

1
Setzen Sie ein return true;am Ende des ifBlocks, dann ist es richtig
androidguy

2
Dieser Ansatz funktioniert nicht für die Home / Back-Schaltfläche mit dem Pfeilsymbol.
Trancer

111

Ich verwende den actionBarSherlock . Nachdem wir festgelegt supportActionBar.setHomeButtonEnabled(true);
haben, können wir die onMenuItemSelected-Methode überschreiben:

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

Ich hoffe diese Arbeit für dich ~~~ viel Glück


4
Arbeitet mir nicht. OnMenuItemSelected kann nicht als endgültig überschrieben werden.
Aritra Roy

Bei Android-Annotationen verwenden Sie einfach @OptionsItem (android.R.id.home) public void yourMethod () {}
Italo Borssatto

23

Wenn wir die vom System angegebene Aktionsleiste verwenden, funktioniert der folgende Code einwandfrei

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

Behoben: keine Notwendigkeit, a zu verwenden setOnMenuItemClickListener. Durch einfaches Drücken der Taste wird die Aktivität durch die Absicht erstellt und gestartet.

Vielen Dank an alle für Ihre Hilfe!


Richtig, die Aktionsleiste kümmert sich onOptionsItemSelected()automatisch um Menü-Listener und Anrufe . Keine manuelle Installation erforderlich (dies kann tatsächlich zu Problemen führen).
Nikolay Elenkov

5

Antworten in der Hälfte des Geschehens. Wenn dies onOptionsItemSelectednicht der homeAsUpFall ist, wechselt die Steuertaste , wenn die übergeordnete Aktivität im System manifest.xml festgelegt wird, zur übergeordneten Aktivität. Verwenden Sie dies im Aktivitäts-Tag wie folgt:

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

3

Sie müssen die Home-Aktion explizit aktivieren, wenn Sie auf ICS ausgeführt werden. Aus den Dokumenten :

Hinweis: Wenn Sie das Symbol verwenden, um zur Heimaktivität zu navigieren, beachten Sie, dass Sie ab Android 4.0 (API-Stufe 14) das Symbol explizit als Aktionselement aktivieren müssen, indem Sie setHomeButtonEnabled (true) aufrufen (in früheren Versionen die Das Symbol wurde standardmäßig als Aktionselement aktiviert.


3
Ich habe bereits ein getSupportActionBar().setDisplayHomeAsUpEnabled(true);und eingetSupportActionBar().setHomeButtonEnabled(true);
noloman


-4

Sie sollten das Onride onOptionsItemSelected löschen und Ihr onCreateOptionsMenu mit diesem Code replizieren

@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
Bitte fügen Sie einige Erklärungen hinzu, damit die Benutzer die Richtlinien von stackoverflow zur Beantwortung nur mit Code verstehen und (zurück?) Lesen können.
N0un
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.