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:
https://gist.github.com/jezinka/6b62c8711f18036e37dd5401c33d31b9
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.
https://gist.github.com/jezinka/86b4e784c614dd8752eba947e6b54827
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 🙂