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.

https://gist.github.com/jezinka/08b0a4dd3c434abd8b712f911e215ebe

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

https://gist.github.com/jezinka/43d1b471b3d7e563f25787c9e0889c6d

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

https://gist.github.com/jezinka/10d94d3d0b3c59fb3799ef8ea761004e

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:

https://gist.github.com/jezinka/e857fd5e8250291c8ba18701c3cd0c93

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

https://gist.github.com/jezinka/ec9bf3cdba816a86dbf4e57bed716970

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.

https://gist.github.com/jezinka/18ba48df5cbaef503f309931d18a2434

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:

https://gist.github.com/jezinka/e47c06d7e690b9fefc1ff06117f0b5fd

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ł 😉

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.