Zaczęłam od podstaw. W Android studio utworzyłam nowy projekt. Wybrałam Androida z minimalną wersją 5.1 (taką jaką mam w swoim telefonie). Podłączyłam telefon i uruchomiłam aplikację. Powitał mnie ładny napis „Hello world”
Na początku stworzyłam listę 7 obiadów:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
List<String> meals = Arrays.asList("bigos", "rosół", "zapiekanka", "pierogi", "pomidorowa", "pesto", "meksykański ryż czerwony"); |
Z pliku activity_main.xml, który zawiera layout, usunęłam TextView z komunikatem „Hello World!” i zastąpiłam go:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<ListView | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:id="@+id/listview" /> |
OK. Mój listview ma szerokość taką jak nadrzędny element (match_parent) i długość dopasowująca się do zawartości (wrap_content). I co teraz, jest lista, jest kontener. Zaglądamy do dokumentacji i tutoriala i po chwili moja klasa MainActivity wyglądał tak:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.projects.jezinka.conaobiad; | |
import android.os.Bundle; | |
import android.support.v7.app.AppCompatActivity; | |
import android.widget.ArrayAdapter; | |
import android.widget.ListView; | |
import java.util.Arrays; | |
import java.util.List; | |
public class MainActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
List<String> meals = Arrays.asList("bigos", "rosół", "zapiekanka", "pierogi", "pomidorowa", "pesto", "meksykański ryż czerwony"); | |
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, | |
android.R.layout.simple_list_item_1, meals); | |
ListView listView = (ListView) findViewById(R.id.listview); | |
listView.setAdapter(adapter); | |
} | |
} |
https://gist.github.com/jezinka/205b6cb73416540b19d94e3c763e0495.js
ArrayAdapter jest miły i buduje nam TextView dla każdego elementu z tablicy jaką mu podaliśmy i przekazuje go do listView.
No to budujemy:
Fajnie, działa ;P ale jeszcze chciałam, żeby było pokazane, że spis jest od soboty do piątku. Potrzebujemy wyciągnąć z Javy listę dni tygodnia. Możemy zrobić to tak:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private ArrayList<String> getListOfWeekdays() { | |
ArrayList<String> weekdays = new ArrayList<String>(); | |
for (int i = 1; i <= 7; i++) { | |
weekdays.add(new DateFormatSymbols().getWeekdays()[i]); | |
} | |
Collections.rotate(weekdays, 1); | |
return weekdays; | |
} |
Czemu ten for taki? Bo getWeekdays() na pierwszej pozycji ma pusty String.
Czemu robię rotate? Bo potrzebuję listę od soboty, a to mi załatwia sprawę
Czy będę tej funkcji potrzebować przez długi czas? Nie, jak tylko napiszę funkcję, która zwraca mi instancje daty dla minionej (lub obecnej) soboty, ten kawałek kodu będzie tylko wspomnieniem w repozytorium.
Funkcja nam się troszkę rozrosła, więc przeniosę tworzenie wiersza do osobnej funkcji i wykorzystam StringBuffer, bo nie wiem co jeszcze przyjdzie mi do głowy wrzucać zanim nie uznam, że wygląda ok.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private ArrayList<String> getPreparedRows() { | |
ArrayList<String> preparedRows = new ArrayList<String>(); | |
List<String> meals = Arrays.asList("bigos", "rosół", "zapiekanka", "pierogi", "pomidorowa", "pesto", "meksykański ryż czerwony"); | |
ArrayList<String> weekdays = getListOfWeekdays(); | |
for (int i = 0; i < weekdays.size(); i++) { | |
StringBuffer row = new StringBuffer(); | |
row.append(weekdays.get(i)); | |
row.append(" – "); | |
row.append(meals.get(i)); | |
preparedRows.add(row.toString()); | |
} | |
return preparedRows; | |
} |
Budujemy i widzimy:
To wersja zupełnie wstępna i nie przywiązuję się do niej. Same hardkody i żadnych testów, ale moim celem było wystartowanie czegokolwiek na androidzie ListView jest dość skromny, więc niedługo pewnie znajdę alternatywę.
Nieźle jak na początek.