374
Rozdział 9.
Tworzymy ListFragment
Jak utworzyć fragment typu ListFragment?
Fragment typu
ListFragment
możesz dodać do projektu tak samo jak każdy
inny fragment. Zaznacz pakiet
com.hfad.trenazer w katalogu app/src/main/
java
, a później wybierz z menu opcję File/New…/Fragment/Fragment (Blank).
Następnie nadaj fragmentowi nazwę
WorkoutListFragment
i usuń zaznaczenia
opcji generowania układu i dwóch pozostałych opcji: metod wytwórczych
i metod zwrotnych interfejsu (fragmenty typu
ListFragment
generują swoje
układy programowo, więc Android Studio nie musi generować ich za nas).
Po kliknięciu przycisku
Finish Android Studio wygeneruje plik fragmentu,
WorkoutListFragment.java, i zapisze go w katalogu app/src/main/java.
Poniżej pokazaliśmy, jak wygląda podstawowy kod tworzący fragment typu
ListFragment
. Jak widać, jest on bardzo podobny do kodu normalnego
fragmentu. Zastąp kod klasy
WorkoutListFragment
wygenerowany przez
Android Studio następującym kodem:
package com.hfad.trenazer;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class WorkoutListFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
}
Nasz fragment musi dziedziczyć
po klasie ListFragment, a nie
po klasie Fragment.
app/src/main
WorkoutList
Fragment.java
Trenazer
java
com.hfad.trenazer
Wywołanie metody onCreateView() klasy bazowej
zwraca domyślny układ fragmentu ListFragment.
Powyższy kod tworzy prosty fragment listy o nazwie
WorkoutListFragment
.
Ponieważ jest to fragment listy, musi dziedziczyć po klasie
ListFragment
,
a nie po klasie
Fragment
.
Implementowanie metody
onCreateView()
jest opcjonalne. Metoda ta jest
wywoływana w momencie tworzenia widoku używanego przez fragment.
W naszym przykładzie implementujemy ją, gdyż chcemy wypełnić listę
fragmentu danymi jak najszybciej po jej utworzeniu. Jeśli nasz kod nie musi
w tym momencie wykonywać żadnych operacji, to także implementowanie
tej metody nie będzie konieczne.
A teraz zobaczmy, w jaki sposób można dodawać dane do widoku listy w jej
metodzie
onCreateView()
.
¨
Fragment WorkoutDetailFragment
¨
Fragment WorkoutListFragment
¨
Koordynacja fragmentów
Usuń zaznaczenia tych
pól wyboru, gdyż ich
nie potrzebujemy. Jeśli
zostaniesz poproszony
o podanie języka
źródłowego fragmentu,
wybierz Javę.
P
: Dlaczego podczas tworzenia
fragmentu listy wybraliśmy szablon
Fragment (Blank), a nie Fragment (List)?
O
:
Szablon
Fragment (List)
generuje
znacznie bardziej złożony kod, który
w przeważającej większości nie jest nam
potrzebny. Kod generowany przez szablon
Fragment (Blank)
jest prostszy.
głupie pytania
Nie istnieją
Fragmenty
375
jesteś tutaj
Adaptery — przypomnienie
Zgodnie z tym, co napisaliśmy w rozdziale 7., do połączenia danych z widokiem listy
można użyć adaptera. Adapter działa jak pomost pomiędzy danymi a widokiem listy.
Dotyczy to zarówno sytuacji, gdy umieszczamy listę we fragmencie, jak i korzystania
z fragmentu listy.
Aktualnie naszym celem jest przekazać do widoku listy wyświetlanego
we fragmencie
WorkoutListFragment
tablicę z nazwami treningów.
Do powiązania tej tablicy z widokiem listy użyjemy adaptera.
Źródło
danych
ListViewAdapter
¨
Fragment WorkoutDetailFragment
¨
Fragment WorkoutListFragment
¨
Koordynacja fragmentów
Nasze dane
znajdują się
w tablicy, jednak
równie dobrze
moglibyśmy
pobierać je
z bazy danych
lub z usługi
sieciowej.
Adapter łączy ze sobą widok listy oraz źródło danych.
Adaptery pozwalają na wyświetlanie w widokach list
danych pochodzących z przeróżnych źródeł.
Chcemy dostarczyć do widoku listy we fragmencie
WorkoutListFragment
tablicę z nazwami treningów; dlatego, podobnie jak wcześniej, do
powiązania danych z widokiem listy użyjemy adaptera typu
ArrayAdapter
.
Pewnie pamiętasz, że jest to typ adaptera służącego do kojarzenia
z listami tablic. Można go używać z dowolnymi klasami pochodnymi
klasy
AdapterView
, czyli zarówno z widokami listy, jak i list rozwijanych
(spinner).
W naszej aplikacji chcemy użyć adaptera
ArrayAdapter
do wyświetlenia
na liście tablicy danych pochodzących z klasy
Workout
.
Adapter działa jak
most łączący widok
oraz źródło danych.
Adapter ArrayAdapter
jest typem adaptera
wyspecjalizowanego do
operowania na tablicach.
Nazwy
treningów
ListView
Array
Adapter
To jest tablica.
To jest nasz widok listy.
Utworzymy adapter typu
ArrayAdapter i użyjemy go, by
powiązać widok listy z tablicą.
Na następnej stronie zobaczymy, jak to działa.
Get Android Programowanie aplikacji. Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.