Do tej pory przy pisaniu aplikacji skupiałem się raczej na jej funkcjonalności. Czas jednak to zmienić, ponieważ w aplikacji która ma symulować grę jakoś mało tej gry jest.

Jedną z pierwszych rzeczy które przychodzą mi na myśl gdy słyszę gry wideo to osiągnięcia/ trofea/ achievementy. Jak zwał tak zwał. Trudno jednak zaprzeczyć że są one dla niektórych motorem napędowych jeśli chodzi o granie. Tak jak w Pokemonach muszą mieć je wszystkie. Także dobrym pomysłem będzie dodanie tego mechanizmu do aplikacji.

Uznałem dobrze by było gdyby osiągnięcia były łatwo dostępne z głównego ekranu aplikacji. Najlepiej za pomocą przeciągnięcia. I tutaj do gry wchodzą Fragmenty. Fragmenty w bardzo dużym uproszczeniu mini aktywności które mogą być wyświetlane we wnętrzu innych aktywności. Trochę masło maślane, ale dzięki Fragmentom możemy tworzyć wielopanelowe UI. Możemy również używać ich jako niewidzialnych klas przetwarzających dane, gdyż nie muszą być one podpięte do UI.

To tyle jeżeli chodzi o wstęp, przejdźmy teraz do wykonania. W pierwotnym designie w UI głównej aplikacji był podpięty plik content_main.xml. Nie będzie nam on jednak dłużej w tej aktywności potrzebny. W jego miejsce wstawiamy dwa nowe elementy:

  • TabLayout – odpowiedzialny za wyświetlanie zakładek nawigacyjnych na górze ekranu
  • ViewPager – odpowiedzialny za storzenie “okienek”, między którymi można przełączać się za pomocą gestów

Nie kasujemy jednak content_main.xml, gdyż będzie nam on jeszcze potrzebny. W MainActivity za to pozbywamy się adaptera RecyclerView i zastąpimy go nowym adapterem FragmentPagerAdapter. Dodajemy więc w onCreate() instancję ViewPagera i przypisujemy do niej ww. adapter. Przy okazji możemy również ustawić TabLayout aby korzystał z utworzonego przez nas ViewPagera.

Następnym krokiem jest stworzenie adaptera. Robimy to poprzez rozszerzenie klasy android.support.v4.app.FragmentPagerAdapter. Metody które musimy nadpisać to getItem() oraz getCount(), my nadpiszemy jednak jeszcze metodę getPageTitle(), które pozwoli na prawidłowe działanie TabLayout.

Ostatnią rzeczą jaką musimy zrobić jest stworzenie klas HabitListFragmentAchievementListFragment. Są to klasy bliźniacze, obie tworzą RecyclerView na podstawie wyników zapytania do bazy danych. Tutaj wykorzystujemy xontent_main.xml, gdyż jest on layoutem pasującym do naszych potrzeb. Zmieniamy jednak jego nazwę na habit_list.xml. Najważniejszymi różnicami w stosunku do ładowania layoutu z poziomu aktywności jest to że targetujemy elementy za pomocą vie.findViewById(), oraz to że Context zastępujemy metodą getActivity().

Podziel się z innymi!Share on Facebook
Facebook
Share on Google+
Google+
Tweet about this on Twitter
Twitter