Menu Kontynuujemy rozwijanie projektu Menedżera Zadań 1. W katalogu res tworzymy podkatalog menu. Z jego menu kontekstowego wybieramy New, Menu resource file i tworzymy plik activity_menedzer.xml zawierający: 2. Brakujące łańcuchy umieszczamy w pliku res/values/strings.xml. Przy okazji usuwamy niepotrzebne. Działające procesy: Odśwież Menedżer Zadań Informacje Zamknij wszystkie Zadania Procesy Usługi Wyjdź Menedżer Zadań\n© Jacek Matulewski 2012\nWWW: http://www.jacekmatulewski.com 3. W klasie ZadaniaActivity dodajemy metody rozwijające menu i usuwające jeden element: //menu @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.activity_menedzer, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.getItem(2).setVisible(false); return true; } 4. Obsługa menu - zmiana aktywnosci: a. Metoda statyczna, ktora bedzie wywolywana ze wszystkich aktywnosci: static void przelaczAktywnosc(Activity biezacaAktywnosc,Class klasaNowejAktynosci) { biezacaAktywnosc.finish(); Intent intencja = new Intent(biezacaAktywnosc.getApplicationContext(), klasaNowejAktynosci); biezacaAktywnosc.startActivity(intencja); } static void akcjaPoWyborzeElementuMenu(Activity activity, int itemId) { switch(itemId) { case R.id.menu_odswiez: // break; case R.id.menu_zadania: przelaczAktywnosc(activity, ZadaniaActivity.class); break; case R.id.menu_procesy: przelaczAktywnosc(activity, ProcesyActivity.class); break; case R.id.menu_uslugi: przelaczAktywnosc(activity, UslugiActivity.class); break; case R.id.menu_info: Toast.makeText(activity.getApplicationContext(), R.string.info, Toast.LENGTH_LONG).show(); break; case R.id.menu_koniec: activity.finish(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); akcjaPoWyborzeElementuMenu(this,item.getItemId()); return true; } 5. W klasach ProcesyActivity i UslugiActivity: //menu @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.activity_menedzer, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.getItem(3).setVisible(false); //w uslugi: 4 return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); ZadaniaActivity.akcjaPoWyborzeElementuMenu(this, item.getItemId()); return true; } -------------------- 6. Odświeżanie list - idea: wszystkie aktywności dzielą ten sam kod a. Potrzeba wspolnego mianownika dla wszystkich aktywnosci - wszystkie maja posiadac metode odswiezListe Do app/java/pl.umk.fizyka.menedzerzadan dodajemy plik z abstrakcyjna klasą (nie interfejs, bo chcemy przekazywac do metody statycznej jeden obiekt zawierajacy także własności typowe dla Activity): Z menu kontekstowego app/java/pl.umk.fizyka.menedzerzadan wybieramy New, Java Class Name: ActivityWithRefreshableList Superclass: android.support.v7.app.AppCompatActivity (zastąpiło android.app.Activity, z której zresztą dziedziczy) Visibility: Public Modifiers: Abstract Kliknij OK Dodaj do klasy metodę odswiezListe package pl.umk.fizyka.menedzerzadan; import android.support.v7.app.AppCompatActivity; public abstract class ActivityWithRefreshableList extends AppCompatActivity { public void odswiezListe() {}; } b. Zmieniamy klasę bazową wszystkich trzech aktywności w projekcie na ActivityWithRefreshableList np. public class ZadaniaActivity extends ActivityWithRefreshableList { od razu musimy oznaczyć metody odswiezListe w tych klasach jako nadpisane i zmienić ich zakres na publiczne @Override public void odswiezListe() { ... c. Zmieniamy typ pierwszego argumentu w statycznej metodzie akcjaPoWyborzeElementuMenu z Activity na ActivityWithRefreshableList. Dzieki temu mozemy wywolac metode odswiezListe: static void akcjaPoWyborzeElementuMenu(ActivityWithRefreshableList activity, int itemId) { switch(itemId) { case R.id.menu_odswiez: activity.odswiezListe(); break; case R.id.menu_zadania: ... } 7. Zabijanie wszystkich zadań, procesów lub usług. Do metod onOptionsItemSelected w poszczególnych aktywnościach dodajemy instrukcje if * Uwaga! W nowszych wersjach Androida zabijanie zadan nie jest czymś łatwym - nie należy tego robić ZadaniaActivity.java: @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); if(item.getItemId() == R.id.menu_zamknij_wszystkie) { ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for(int i=0;i