Lista posiłków – taki mały, wielki komponent:
Pozwala dodać element do tabelki w bazie danych, wyświetla to co w tabelce (o, bug w sortowaniu 😛 ), pozwala edytować i usunąć to co zapisane. To czego nie widać akurat na tym ekranie to możliwość filtrowania [w sumie, może tutaj też by się przydało]. Pojawia się to w innym miejscu aplikacji, bo tego samego adaptera używam też w innym miejscu zgodnie z zasadą DRY
Cały kod adaptera do znalezienia na githubie (dokładnie tu). Ogólnie zaczął być tworzony jako klasa rozszerzająca BaseAdapter do czasu kiedy okazało się, że przydałoby się jednak zrobić to tak, żeby można go było użyć ponownie przy ekranie z wyborem posiłków. Największym wyzwaniem okazało się, sprawienie żeby działał raz na widoku, który obsługuje wybranie jednego elementu z listy, a za drugim razem dla wielokrotnego wyboru. Rozwiązaniem tego problemu okazał się być ArrayAdapter, który pozwolił mi zdefiniować z jakich dokładnie obiektów składa się moja lista i jakiego komponentu użyć do jej wyświetlenia. Adapter implementuje też interface gFilterable, znaczy się, implementuję metodę getFilter, która filtruje posiłki na podstawie tego co użytkownik wpisał w pole do wyszukiwania. Brzmi to poważniej niż sam kod 😀
Tworzenie adaptera, w jednym (MealListActivity.java)
adapter = new MealListAdapter(this, android.R.layout.simple_list_item_multiple_choice, mealContract.getAllMealsArray(dbHelper));
i w drugim przypadku (MealPickerFragment.java)
final MealListAdapter adapter = new MealListAdapter(getContext(), android.R.layout.simple_list_item_1, meals);
Po stworzeniu podłączenie
mealListView.setAdapter(adapter);
ListView nie byłby kompletny bez zaimplementowania kilku akcji – onItemClick żeby zaznaczyć do usunięcia i onItemLongClick do edycji dla ekranu do zarządzaniem posiłkami:
https://gist.github.com/jezinka/a9779751c47d905e846f90968d59a350
Wybieranie i wykonywanie filtrowania na liście/adapterze w miejscu gdzie tworzymy obiad:
https://gist.github.com/jezinka/1707925c1085cdea4727ff3843520aaa
Przede mną zapewne jeszcze jeden podobny adapter – ale tym razem dla obiektu Dinner. Mam nadzieję, że będzie z górki, skoro pierwsze koty za płoty 😉
Zamierzam jeszcze w przyszłości wrócić do implementacji tej listy, bo w planach mam co najmniej zaimplementowanie usuwania na zasadzie „swipe for dismiss” i dodanie później kolejnych pól do tej listy, żeby ViewHolder był bardziej rozbudowany niż jedno pole tekstowe 🙂
One thought on “obsłużmy listę – Filterable ArrayAdapter – #0F”