Dodajmy składniki – showIngredientPickerDialog – #16

Wymyśliłam sobie, że przy dodawaniu składników do posiłku, te składniki, które już są przypisane do danego posiłku mają mieć domyślnie zaznaczonego checkboxa… to sobie wymyśliłam…

Na początek potrzebowałam stworzyć zapytanie sql… szkoda, że pomimo wielu prób nie udało mi się skopiować bazy danych z telefonu i otworzyć jej w jakimś managerze bazy danych. Dobrze, że mam prostą strukturę, którą mogłam odtworzyć w SQLFiddle. Na ten moment query wygląda tak:

https://gist.github.com/jezinka/0269db5bdc85e36699b974f41f9696af

W niedalekiej przyszłości planuję stworzyć jakiś sql builder, bo nie chcę przechowywać aż tak zahardkodowanej struktury, a zwykła podmiana nazw tabelek na zmiennie wygląda tragicznie…

Żeby móc dobrać się do checkboxów na liście musiałam stworzyć własny xml zawierający rekord z listView:

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

Potrzebowałam ułożyć obok siebie dwa komponenty i jednocześnie miało być to użyte w dwóch widokach różniących się szerokością, więc użyłam PercentRelativeLayout. Dzięki temu ładnie się dopasowuje niezależnie od szerokości komponentu. Żeby użyć tego layoutu do build.gradle trzeba dorzucić dodatkową linijkę:

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

Poza stworzeniem xml-a musiałam jeszcze podpiąć listenery. Tu pojawiły się dwa problemy. XML-a ładowałam w adapterze, to też było jedyne miejsce gdzie mogłam podpiąć zdarzenia na onClick, a jednocześnie potrzebowałam dwóch różnych reakcji w zależności od widoku, który wyzwolił akcję. Na szczęście wszystko udało się rozwiązać. W adapterze ustawiłam taką obsługę zdarzeń:

https://gist.github.com/jezinka/2edba1054c1fb08d060e567b634c8bca

Takie podejście pozwala przekazać zdarzenie do elementu nadrzędnego – w moim przypadku do listView i oprogramować je dla każdego widoku osobno 🙂

https://gist.github.com/jezinka/4f3648f536021b24efbd12fd857a2c5d

https://gist.github.com/jezinka/005a00e347204bfa1365256fbecaa2e8

Małe niewyraźne demo jak to wygląda teraz:

output_yKyWpj.gif

 

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.