Close

Filtrujemy ep.2 – FilterListener.onFilterComplete() – #1A

Po co przerywać użytkownikowi dodawanie składników do posiłku i wysyłać go na ekran dodawania składników? Zrobię to mądrzej 🙂

Jedną z rzeczy, które lubię w programowaniu jest to, że jeżeli sobie coś wymyślę, to z reguły okazuje się, że da się to zrobić. Problemem jest tylko ilość czasu, który trzeba na to poświęcić.

Mam filtrowaną listę składników, które mogę dodać do posiłku, ale w momencie kiedy wyszukiwanego składnika nie ma jeszcze w bazie użytkownik będzie zmuszony przerywać proces, przechodzić do ekranu dodawania składnika i wracać żeby go przypisać do posiłku. Męczące i nieefektowne.

Wymyśliłam sobie, że jeżeli przefiltrowana lista przestaje zwracać cokolwiek, to przy szukajce pojawia się klikalny przycisk dodawania. Po kliknięciu na plus składnik dodaje się do bazy i od razu przypisuje do posiłku + użytkownik dostaje wiadomość o poprawnym dorzuceniu składnika do bazy.

Tak to wygląda w praktyce:

a tak w kodzie:

Do wywołania metody filter.filter(s) dorzucamy listener, który zostanie odpalony po zakończeniu filtrowania. Dzięki temu możemy sprawdzić ile rezultatów zostało zwróconych i w zależności od tego pokazać przycisk dodawania. Zależało mi na tym żeby przycisk dodawania był wyświetlany kiedy zostaną spełnione takie a nie inne warunki, stąd ta dziwna komenda setCompoundDrawablesWithIntrinsicBounds. Gdyby przycisk miał być widoczny zawsze wsadziłabym go w xml-a.

Trochę więcej trudności sprawia obsługa kliknięcia w taki “przycisk”. Niestety trzeba wyliczać czy obszar, na który kliknął użytkownik zawiera się w obszarze wyświetlania ikonki… no cóż, skoro tak trzeba, to trzeba. Nikt nie wymyślił nic mądrzejszego.

Po tym jak stwierdzimy, że użytkownik kliknął w ikonkę i ma coś wpisane dodajemy to do bazy – dokładnie do dwóch tabelek, tej ze składnikami i tej asocjacyjnej dla posiłków i składników. Przeładowujemy listę, czyścimy filtr i wyświetlamy użytkownikowi wiadomość, żeby się nie zdziwił, że coś się nagle dzieje.

To tyle na dziś, czas chyba opracować funkcję tworzącą listę zakupów 🙂

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: