Programowanie na Androida krok po kroku – cz.8 Menu ustawień oraz zapisywanie informacji

W ostatniej części kursu dowiedzieliśmy czym są intencję i jak możemy je wykorzystać. Dziś zajmiemy się jak wykonać panel ustawień dla naszej aplikacji, który będzie przechowywał informacje w pamięci urządzenia. Dowiemy się, że większość ustawień programów jest przechowywana w plikach XML, co powoduje, że dostęp do nich jest bardzo łatwy.

Zaczniemy od stworzenia przycisku w menu podręcznym, który otworzy nam panel ustawień. Domyślnie Eclipse utworzyło nam jeden przycisk, który na razie nic nie robi. My dodamy jeden własny przycisk, który będzie przechodził do nowego okna – wykorzystamy tutaj znane nam z poprzedniej części kursu intencje.

1. Na początek przeanalizujmy kod aplikacji, który spowodował wyświetlenie podręcznego menu.

1

 

2. Cały kod inicjujący zawarty jest w tych dwóch metodach. Pierwsza z nich odpowiada za wyświetlenie menu podręcznego, druga z nich określa jaka akcja ma być wykonana po naciśnięciu danej opcji. Na razie zajmijmy się pierwszą metodą. Wszystkie opcje menu przechowywane są w pliku menu.xml, który jest inicjowany przez właśnie metodę onCreateOptionsMenu(Menu menu).

1

 

3. Jak widać jest tu zawarta pierwsza z opcji – przycisk Settings, jednakże my utworzymy osobny przycisk, aby pokazać wam jak to wygląda od środka.

 

1

 

4. Drugi przycisk dodałem podobnie jak pierwszy, jednakże zmieniłem parametr android:showAsAction z never na always – zmiana spowoduje, że ten element będzie zawsze wyświetlany a ActionBarze. Musimy oczywiście dodać jeszcze brakujący string.

1

 

5. Myślę, że tutaj nie ma nic skomplikowanego. Teraz proponuję przetestować naszą aplikację.

Przechwytywanie6. Nasz przycisk nie znajduję się bezpośrednio w ActionBarze, tak jak wcześniej to ustaliliśmy. Teraz spróbujemy przypisać do niego akcję, ale na początek utwórzmy nowe okno aplikacji – spróbujcie zrobić to sami mając doświadczenie z poprzedniej lekcji z taką różnicą by nie zawierało ono przycisku ustawień.

7. Przejdźmy do kodu Java naszego głównego activity. Metoda „public boolean onOptionsItemSelected(MenuItem item)” pozwala nam na wprowadzenie akcji do naszej opcji. Przyjrzyjmy się temu fragmentowi:

Przechwytywanie

 

8. Zmienna int pobiera id elementu, który został wybrany. Jeśli id równa się action_settings to wtedy wykonujmy kod, który chcemy (w naszym przypadku będzie to otworzenie nowego okna). Wartość true zwracamy, ponieważ wymaga od nas tego metoda. Teraz stwórzmy podobny kod dla naszego przycisku oraz dodajmy kod wywołujący intencję, która otworzy klasę Ustawienia:

1

 

9. Teraz zajmiemy się przechowywaniem ustawień. Nasza aplikacja będzie przechowywać ciąg znaków i wyświetlać go w głównej aktywności.

1

 

10. Nasze okno będzie wyglądać mniej więcej tak. Teraz przejdźmy do kodu aplikacji (nie zapomnijcie o onClick w buttonie). Wyjaśnienie tego kodu jest w komentarzach, aby widzieć co w danym momencie się dzieje.

 

 

11. Nasz kod będzie zapisywał informacje z pola tekstowego, a po ponownym jej uruchomieniu odczytywał poprzednio zapisywaną wartość.

12. Standardowo kompilujemy naszą aplikację i sprawdzamy jej działanie. Spróbujcie zrestartować emulator i sprawdźcie czy wpisane dane nadal tam są.

Przechwytywanie

To cały kod dotyczący preferencji. Na koniec chciałbym dodać kilka ważnych informacji o przechowywaniu informacji:

  • Ustawienia mogą być odczytywane i zapisywane przez różne aktywności – nic nie stoi na przeszkodzie, aby ten sam kod skopiować do innej aktywności
  • Preferencje nie mogą być odczytywane przez inne aplikacje – są one dostępne tylko dla naszego projektu
  • Można przechowywać inne informacje niż stringi. My wykorzystaliśmy metodę putString, ale można wykorzystać także np. putInt.

Dodatkowo podrzucam kod naszej aplikacji: AplikacjaZUstawieniami

Na koniec daję wam dwa ćwiczenia, które pomogą oswoić wam się z tym kodem:

  1. Spróbujcie usunąć przycisk Settings domyślnie dodawany podczas tworzenia aktywności (podpowiedź: pamiętajcie o Stringach)
  2. Zróbcie, aby te same ustawienia mogły być odczytane przez główną aktywność.