OnNavigationItemSelected in ActionBar wird beim Start aufgerufen, wie man es vermeiden kann?

Ich benutze ActionBar mit einem Dropdown-Menü, und onNavigationItemSelected() wird aufgerufen, sobald die Aktivität erstellt wird, also wird das erste Element aufgerufen. Das erste Element meiner Dropdown-Menü ist Home, die gleiche Aktion wie das Drücken der Anwendung Symbol mit android.R.id.home so, wenn die Anwendung startet es ruft sich. Um dies zu vermeiden, habe ich diesen Code:

 if(this.getClass() != FrecView.class){ //if i am not currently on the Activity Intent frec = new Intent(this, FrecView.class); frec.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(frec); } 

Aber ich habe ActionBar auf all meine Aktivitäten so jedes Mal, wenn jede Aktivität gestartet wird, nennt es sich für immer so muss ich diesen Code für jede Aktivität setzen. Was ist los? Wie kann ich das verhindern?

  • Kann kein Java Runtime Android Studio Robolectric finden
  • Können wir iBeacon verwenden, um Daten über Bluetooth in iOS - android zu übertragen?
  • Azure MobileServicePushFailedException auf Android
  • Verringerung der Schriftgröße von AlertDialog.Builders Komponenten
  • Rufen Sie die Aktivitätsmethode vom Broadcast-Empfänger an
  • Einstellen von itemId im Optionsmenü
  • Benutzerdefinierte Aktionsansicht kann nicht angeklickt werden
  • Dynamisches Hinzufügen von Bildern zum Galerie-Widget
  • Wie benutzt man Wörterbuch (wie iphone NSDictionary) in android?
  • Wo kann man Code für die Anwendung starten?
  • Zeichnen Sie eine perfekte Kurve, die drei Punkte verbindet
  • Org.json.JSON Ausnahme: Ende der Eingabe bei Zeichen 0
  • 4 Solutions collect form web for “OnNavigationItemSelected in ActionBar wird beim Start aufgerufen, wie man es vermeiden kann?”

    Ich benutze ActionBar whit ein Dropdown-Menü und onNavigationItemSelected () wird aufgerufen, sobald Aktivität erstellt wird

    Dies ist nicht entworfen, um ein "Menü" zu sein, mehr als Tabs sind entworfen, um ein "Menü" zu sein. Die Listennavigation ist so konzipiert, dass der Benutzer einen bestimmten Inhalt für die aktuelle Aktivität anzeigen kann, typischerweise durch das Ersetzen eines Fragments. Aktionselemente (zB Symbolleistenschaltflächen, Aktionsspillover-Bereich) dienen der Navigation zwischen den Aktivitäten.

    Das erste Element meiner Dropdown-Menü ist Home die gleiche Aktion wie das Drücken der Anwendung Icon whit android.R.id.home so, wenn die Anwendung startet es ruft sich.

    Also, löschen Sie das aus Ihrem "Menü". Der Benutzer kann Ihr App-Symbol auf der linken Seite drücken, um nach Hause zu navigieren.

    Wie Markus gesagt hat, ist es nicht entworfen, um ein Menü zu sein.

    Allerdings ist hier ein schneller und dreckiger Ansatz, um den ersten Anruf zu ignorieren:

    Deklariere dieses Klassenfeld:

     //mNaviFirstHit should be initialized to true private boolean mNaviFirstHit = true; 

    Und im onNavigationItemSelected:

     @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { if (mNaviFirstHit) { mNaviFirstHit = false; return true; } // DO WHAT YOU WOULD NORMALLY DO } 

    Sie können die richtige Standardeinstellung in Ihrem "Menü" mit folgendem erzwingen:

     bar.setListNavigationCallbacks(mNavigationAdapter, this); bar.setSelectedNavigationItem(indexOfCurrentActivityInTheMenu); 

    Gegen intuitiv muss dies nach der Einstellung der Rückrufe erfolgen (was meines Erachtens den Rückruf eine Chance geben würde, mit dem Navigationsindex von 0 zu schießen). Zum Beispiel hat meine App zwei Aktivitäten ListView und PageView, und ich mag mein Navigationsmenü alphabetisch geordnet, aber die Standard-Start-up-Aktivität ist PageView. Also habe ich folgendes in PageView's onCreate ():

     bar.setListNavigationCallbacks(mNavigationAdapter, this); bar.setSelectedNavigationItem(1); 

    Und in ListView's onCreate ():

     bar.setListNavigationCallbacks(mNavigationAdapter, this); bar.setSelectedNavigationItem(0); 

    Dann, egal wie oft ich an startActivity (otherView) anrufe, wird das Navigationsmenü immer korrekt eingestellt.

    Zuerst dank @CommonsWare für die Erinnerung an uns ist es eine Alternative zu Tabs, so dass der Code sollte mit dieser Perspektive entworfen werden. Obwohl es nicht so einfach ist, wie es scheint, können wir dennoch dort arbeiten.

    Dies kann auch mit einer Fahne vermieden werden. Aber irgendwie schlage ich den Ansatz vor, den ich gemacht habe, um das zu beheben.

    Stellen Sie einfach sicher, dass es einmal genannt wird. Daneben macht es eine innere Klasse als eine anonyme. Das wird verhindern, dass es jedes Mal aufgerufen wird, wenn dieser Teil des Codes ausgeführt wird. Code unten:

     if(localOnNavigationListener != null) localOnNavigationListener = new LocalOnNavigationListener(); class LocalOnNavigationListener implements OnNavigationListener{ @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // do something return true; } } 

    Und ich sehe hier ein seltsames Ereignis, wenn ich es zu einer inneren Klasse mache, die es nicht aufNavigationItemSelected () anruft, wenn wir es zu einer anonymen Klasse machen, wird es aufNavigationItemSelected-Methode ausgelöst. Wenn jemand etwas Licht darauf werfen kann, wird es nützlich sein.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.