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.

Noloman
quelle

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);
}
Saad Mahmud
quelle
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

lynn8570
quelle
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;
}
Raju
quelle
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!

Noloman
quelle
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>
David
quelle
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.

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

Der beste Weg, um die Aktionsleiste onClickListener anzupassen, ist onSupportNavigateUp ()

Dieser Code ist ein hilfreicher Link, um dem Code zu helfen

Naeem Ibrahim
quelle
-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;

    }
Soha Soha
quelle
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