Autobuser jest prawie skończony, więc mam chwilę, żeby podzielić się rozwiązaniem kolejnego problemu.
Żeby interfejs był spójny i czytelny chcieliśmy, żeby użytkowik mógł w każdej chwili przejść do Ulubionych, Szukania lub Połączeń. Najprostszym wyjściem byłoby tworzenie takiego samego menu w każdym Activity::onCreateOptionsMenu, ale to spowodowałoby rosnącą w nieskończoność “ścieżkę”uruchomionych activities (każde kolejne wywołanie przesłaniałoby aktualne i przycisk “Wstecz” moznaby klikać w nieskończonosć).
Postanowiłem samemu obsługiwać przycisk “Wstecz” i i korzystać cały czas z jednej klasy do tworzenia menu.
Klasa główna dziedziczy po ActivityGroup i nadpisuje onCreateOptionsMenu, w onOptionsItemSelected LocalActivityManager zamyka chodzące aktualnie Activity i uruchamia kolejne w tym samym oknie.
Może trochę kodu, żeby rozjaśnić…
@Override
public boolean onCreateOptionsMenu(Menu menu) {
(new MenuInflater(this)).inflate(R.menu.mainmenu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
//super.onOptionsItemSelected(item);
// Find which menu item has been selected
try {
activities.clear();
activities.add(new Intent(Autobuser.this, Favourites.class));
mLocalActivityManager.removeAllActivities();
switch (item.getItemId()) {
// Check for each known menu item
case (R.id.mainmenu_favorites):
activities.clear();
startActivity(new Intent(Autobuser.this, Favourites.class));
return true;
[...]
}
}
}
public void startActivity(Intent i) {
activities.add(i);
setContentView(mLocalActivityManager.startActivity(i.toURI(), i).getDecorView());
}