stwórzmy coś – ListView – #01

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:


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:


<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:


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:

wp-1488299936960.png

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:


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.


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:

wp-1488375930633.png

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.