Wpisy z Czerwiec, 2009

MOPS:BMP w Bramie

Geeenialna impreza!

W ostatni poniedziałek i wtorem (15-16.06) BRAMA zorganizowała seminarium i warsztaty między innymi „z Androida”.

ActivityGroup i LocalActivityManager

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());
}

Tagi

android autobuser cron google java linux python sieć sms test

linki