Close

Ustawienia – PreferenceActivity – #12

Dobrze, że przeczytałam dokumentację Androida zanim zabrałam się za implementację ustawień użytkownika za pomocą Shared Preferenced:

This class shows you how to use the SharedPreferences APIs to store and retrieve simple values.

Note: The SharedPreferences APIs are only for reading and writing key-value pairs and you should not confuse them with the Preference APIs, which help you build a user interface for your app settings (although they use SharedPreferences as their implementation to save the app settings). For information about using the Preference APIs, see the Settings guide.

Skoro już wiedziałam czego nie używać mogłam zagłębić się w implementację 😉 A ta nie była łatwa… Po połączeniu wiedzy z kilku źródeł (dokumentacjastackOverflow) udało mi się stworzyć coś co działa. Na ten moment są dwa ustawienia:

wp-1492348819802.

Do menu na głównym ekranie dodałam pozycję z ustawieniami:

wp-1492348810516.

I switch z funkcji onOptionsItemSelected wzbogacił się o jeszcze jeden case:

Tu jeszcze nie było żadnych problemów, kod jak kod. XML z ustawieniami też normalny w sumie:

Jedno ustawienie jako wybieranie z listy dostępnych wartości, drugie wpisujemy jako zwykły tekst:

Ciekawostką tutaj jest to, że jeśli używamy listPreference i w summary umieścimy „%s” to wyświetli nam się aktualnie wybrana wartość. Niestety nie jest to spójne i nad aktualizacją i wyświetlaniem długości tygodnia jeszcze pracuję, bo ustawia się tylko w momencie zmiany.

Dni tygodnia i wartości przechowuję w arrays.xml:

Schody zaczęły się przy SettingsActivity od razu z klasą SettingsFragment:

Dużo czasu i prób zajęło mi ogarnięcie listenera, który śledził zmianę wartości ustawień. Wymyśliłam sobie jeszcze, że w momencie jak użytkownik zmieni ustawienia to powinien mu się przeładować główny ekran. W MainActivity stworzyłam metodę onResume, która uruchamia się w momencie kiedy użytkownik wraca na główny ekran. Dorzuciłam jeszcze statyczną globalną zmienną, którą ustawiam w momencie kiedy zmieniam ustawienia, żeby nie przeładowywać ekranu niepotrzebnie.

Pozostało jeszcze wykorzystać te ustawienia do pobierania listy obiadów z bazy i wyświetlania ich na głównym ekranie. W tym celu na wydzieliłam sobie klasę TimeUtils.java z metodami:

Tam gdzie do tej pory sprawdzaliśmy czy dzień dzisiejszy jest sobotą teraz sprawdzamy czy jest tym dniem, który użytkownik wyznaczył sobie jako pierwszy dzień tygodnia. Z kolei pętla, która szła przez 7 dni, teraz idzie przez tyle dni ile określił użytkownik. Potrzeba skorzystania ze zmiennej Context spowodowała, że musiałam przeorać się przez aplikację, zastanawiam się, czy nie należało stworzyć tego jako pola w klasie i nie ustawiać tego w momencie inicjalizacji klasy, ale to materiał do przemyśleń w trakcie refaktoryzacji 😉

Wesołych Świąt jeśli ktoś tu dotarł 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: