72

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

Ich habe bereits eine getSupportActionBar().setDisplayHomeAsUpEnabled(true); gemacht und jetzt möchte ich den Benutzer zu einer bestimmten Aktivität umleiten, wenn die Home-Taste 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 geht nie in der onMenuItemClick.

Im Grunde ist es genau wie in this link getan, aber es geht immer noch nicht in den Hörer.

Antwort

7

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

Vielen Dank alle für Ihre Hilfe!

+0

Rechts, die Aktionsleiste kümmert sich um Menü Listener und ruft 'onOptionsItemSelected()' 'automatisch auf. Keine Notwendigkeit, manuell zu installieren (das kann tatsächlich Dinge brechen). –

3

Sie müssen die Home-Aktion explizit aktivieren, wenn sie auf ICS ausgeführt wird. Von the docs:

Hinweis: Wenn Sie auf das Symbol verwenden zu Hause Aktivität zu navigieren, passt diese mit Android 4.0 (API-Ebene 14) beginnen, müssen Sie explizit auf das Symbol als Aktionselement aktivieren, indem Sie Aufruf setHomeButtonEnabled (true) (in früheren Versionen war das Symbol standardmäßig als Aktionselement aktiviert).

+3

Ich habe bereits ein 'getSupportActionBar() setDisplayHomeAsUpEnabled (true);'. und eine 'getSupportActionBar().setHomeButtonEnabled (true); ' – noloman

107

Ich benutze die actionBarSherlock, nachdem wir setzen supportActionBar.setHomeButtonEnabled(true);
wir die onMenuItemSelected Methode überschreiben können:

@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 diese Arbeit hoffen Ihnen viel Glück ~~~

+3

+1 Das funktioniert auch für Native Action Bar. – Phil

+4

Funktioniert mich nicht ich. OnMenuItemSelected kann nicht als endgültiges überschrieben werden. –

+0

Mit Android-Annotationen einfach @OptionsItem (android.R.id.home) verwenden public void yourMethod() {} –

20

wenn wir die Verwendung System gegeben Aktionsleiste folgenden Code funktioniert gut

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

, ob jemand die Lösung

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

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

    return super.onOptionsItemSelected(item); 
} 
+0

Dies sollte eine Lösung sein. große Antwort – jemsnaban

+1

Arbeitete für mich mit 'return true;' – Rick

+0

Setzen Sie eine 'return true;' am Ende des 'if' Blocks, dann ist es korrekt – user3175580

2

Der beste Weg, brauchen Aktionsleiste zu gestalten ist OnClickListener onSupportNavigateUp()

Dieser Code hilfreich link for helping code sein

1

Antworten in die Hälfte von dem, was passiert ist. wenn onOptionsItemSelected nicht Steuerelement homeAsUp Schaltfläche, wenn die übergeordnete Aktivität in manifest.xml System setzt, geht zu übergeordneten Aktivität. verwenden, wie dies in Aktivitäts-Tag:

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

Sie sollten Ihr das Aufschalten onOptionsItemSelected löschen und Ausstrich Ihre onCreateOptionsMenu mit diesem Code

@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 Leute die Stackoverflow-Richtlinien zur Antwort mit nur Code verstehen und (zurück?) Lesen können. – N0un