Android
2019-07-11
Presenter jest ostatnim opisywanym przeze mnie elementem. Jest to fragment spajający widoki z dostępem do danych. Reaguje on na interakcje użytkownika oraz lifecycle.
Nie znasz MVP, albo nie widzisz różnicy pomiędzy MVP a MVC. Nie szkodzi ja też do niedawna nie widziałem. Więcej możesz poczytać tutaj:
MVC vs. MVP vs. MVVM on Android
Kod zaprezentowany w tym poście jest częścią mojej przykładowej aplikacji. Jej źródło znajdziesz tutaj:
MVPWithFirebase
Drugą część o dostępie do danych znajdziesz tutaj:
MVP w Androidzie - Model
Presenter przede wszystkim odpowiada za przechowywanie stanu widoku, na którym on operuje.
Zapewnia to, że nie będzie możliwe dostać NPE w przypadku kiedy nasz widok stanie się nieaktywny (np. onPause).
W tym celu istnieje klasa abstrakcyjna BasePresenter, która przechowuje stan View.
Dodatkowo funkcje onViewActive i onViewInactive mogą zmienić jego stan. Każda klasa presenter w moim przykładzie implementuje BasePresenter.
Klasa Topics nie jest skomplikowana więc jej kontrakt także jest bardzo prosty.
W tym przykładzie TopicsPresenter musi implementować tylko funkcję getTopics.
Pobiera ona dane z klasy DataRepository i ze względu na rezultat zwraca listę lub błąd.
Instancja presentera powinna zostać utworzona wraz ze wstrzykniętymi źródłami danych.
Aby nie dopuścić do odwoływania się do pustego obiektu. W View czyli tutaj TopicsFragment w metodach onResume() i onPause() powinniśmy aktywować i dezaktywować dostęp do widoku.
Na sam koniec wypada wytłumaczyć krok po kroku co się ze sobą komunikuje i w jaki sposób.
1. Klasa TopicsFragment zostaje uruchomiona z MainActivity
2. Tworzy instancję DataRepository i przekazuje jako parametr do TopicsPresenter
3. Tworzy instancję TopicsPresenter
4. Wywołuje na presenterze onViewActive
5. Wywołuje na presenterze funkcję getTopics z parametrem 'ref'
6. Jeśli widok jest aktwny to w TopicsPresenter to wyświetlany jest ProgressBar i wywoływany GetTopicsCallback
7. W klasie DataRepository wybierane jest źródło danych i są one przekazywane za pomocą funkcji onSuccess do presentera
8. W TopicsPresenter lista z danymi jest przekazywana do TopicsFragment za pomocą showTopics()
9. W TopicsFragment w funkcji showTopics aktualizowane są elementy listy
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.