2012-05-25 22 views
12

Chcę zaimplementować Navigation Pattern w mojej aplikacji za pomocą przycisku Up w pasku akcji.Przycisk Akcja przycisku nawigacyjnego i wzorzec nawigacji

Mam Szczegóły Aktywność, tutaj mogę przyjść z ekranu głównego, ulubionych i wyszukiwania. Również mogę otworzyć ten ekran z przeglądarki (obsługa określonego adresu URL). Kiedy użytkownik naciśnie przycisk Up, używam metody flush(), aby emulować nawigację wstecz. Ale dla przypadku, gdy użytkownik pochodzi z przeglądarki, chcę otworzyć ekran główny zamiast poprzedniej aktywności przeglądarki. Jak mogę rozpoznać, że poprzednia aktywność pochodzi z innej aplikacji i przejść do ekranu głównego?

Odpowiedz

20

Up Powinny zawsze nawigować do hierarchicznego nadrzędnego działania, a Back powinien zawsze nawigować tymczasowo.

Innymi słowy powinieneś wyjść z powrotem takim, jakim jest.

Jeśli chodzi o Górę, zawsze należy iść w to samo miejsce, niezależnie od tego, skąd pochodzi. Więc jeśli zwykle odwiedzasz stronę DetailsActivity z YourListActivity, Up powinien zawsze iść tam niezależnie od tego skąd pochodzisz. To, co jest najbardziej prawdopodobne, zależy od Twojego uznania, ale zawsze powinno być takie samo.

Jeśli przejdziesz do działania Szczegóły z innej niż normalna lokalizacji (takiej jak przeglądarka, inna aktywność, widget lub powiadomienie), powinieneś odtworzyć stos zadań, aby nawigacja przy użyciu wyników w górę w tej samej ścieżce. Oto przykład z Android Developer Training:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     Intent upIntent = new Intent(this, YourListActivity.class); 
     if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
      // This activity is not part of the application's task, so 
      // create a new task 
      // with a synthesized back stack. 
      TaskStackBuilder 
        .from(this) 
        .addNextIntent(new Intent(this, HomeActivity.class)) 
        .addNextIntent(upIntent).startActivities(); 
      finish(); 
     } else { 
      // This activity is part of the application's task, so simply 
      // navigate up to the hierarchical parent activity. 
      NavUtils.navigateUpTo(this, upIntent); 
     } 
     return true; 
    } 
} 

Oto szkolenie Android na nawigacji wykonawcze

(http://developer.android.com/training/implementing-navigation/index.html).

Będziesz potrzebować biblioteki pomocy dla NavUtils i TaskStackBuilder.

+8

Podczas korzystania z tej metody aktywność nadrzędna traci wszystkie dodatki i stan. Czy mimo to chcesz przywrócić stan? – sarunw

+2

zgodnie z wytycznymi (http://developer.android.com/design/patterns/navigation.html), powrót nie powinien nawigować w czasie, gdy powiadomienie umieści Cię głęboko w aplikacji. Zobacz przykłady z Gmaila lub kalendarza. – Maragues

+0

@art możesz wypróbować moje rozwiązanie: http://stackoverflow.com/a/20306670/878126 –

Powiązane problemy