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?

  • Wie man Android-Sdk-Größe auf Festplatte zu reduzieren
  • Was ist der richtige Weg, um ein Android-Widget mit dynamisch gezeichneten Inhalt zu implementieren?
  • Validieren Paypal Pay ID übergeben von Android in Magento Website
  • Wie installiere ich Android Lolipop in Eclipse?
  • Kombinieren Sie ein Bild in Audiodatei und erstellen Sie eine Video-Datei in Android programmgesteuert
  • Google Play Services Update
  • Wie kann ich eine Textdatei in Android lesen?
  • Android: Wie kann ich eine unendliche Animation auf eine ImageView anwenden?
  • ClassNotFoundException beim Unmarshalling von android.support.v7.widget.Toolbar $ SavedState
  • Warum bekomme ich einen "sqlite3: nicht gefunden" Fehler auf einem verwurzelten Nexus One, wenn ich versuche, eine Datenbank mit der Adb-Shell zu öffnen?
  • 2D Cross-Plattform-Spiel-Engine für Android und iOS?
  • Irgendeine Möglichkeit, Android-Geräte in deinem Netzwerk zu entdecken?
  • 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.