Fragmenty dla większych interfejsów
419
jesteś tutaj
¨
Utworzenie AVD
¨
Utworzenie układu
¨
Wyświetlenie treningu
Stosowanie transakcji fragmentów
Fragmenty można programowo dodawać do układu aktywności pod warunkiem,
że będzie ona działać. Niezbędne jest do tego określenie grupy widoków,
w której fragment ma zostać umieszczony, takiej jak układ
FrameLayout
.
Fragmenty można dodawać, zastępować oraz usuwać w trakcie działania aplikacji,
używając
transakcji fragmentów
. Transakcja fragmentu to zestaw zamian związanych
z fragmentem, które mają być przeprowadzone w tym samym czasie.
W ramach tworzenia transakcji fragmentu należy wykonać trzy czynności opisane poniżej:
To wywołanie stanowi
początek transakcji
fragmentu.
Rozpocząć transakcję.
W ten sposób informujemy Androida, że rozpoczynamy serię zmian,
które chcemy zarejestrować w formie transakcji.
Określić zmiany.
Są to wszystkie czynności, które chcemy zgrupować w danej
transakcji. Mogą one polegać na dodaniu, zastąpieniu fragmentu,
aktualizacji danych oraz dodaniu ich do stosu cofnięć.
Zatwierdzić transakcję.
Ta operacja kończy transakcję i powoduje zastosowanie zmian.
1. Zacznij transakcję
Aby rozpocząć transakcję, w pierwszej kolejności należy pobrać
referencję do menedżera fragmentów danej aktywności. Jak zapewne
pamiętasz z poprzedniego rozdziału, menedżer fragmentów służy do
zarządzania fragmentami używanymi w aktywności. Jeśli używamy
fragmentów pochodzących z biblioteki wsparcia, jak to robimy w tym
przykładzie, to referencję do menedżera fragmentów można pobrać,
stosując poniższą metodę:
getSupportFragmentManager()
Po pobraniu referencji do menedżera fragmentów, aby rozpocząć
transakcję, wystarczy wywołać metodę
beginTransaction()
:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
I to już wszystko, co należy zrobić w celu rozpoczęcia transakcji.
Na następnej stronie zostanie opisany sposób określania zmian,
które chcemy wprowadzić.
To wywołanie zwraca menedżer fragmentów, który
pozwala operować na fragmentach pochodzących
z biblioteki wsparcia.
1
2
3
420
Rozdział 10.
Zmiany w transakcji
transaction.addToBackStack(null);
Ewentualnie można także użyć metody
setTransition()
, aby określić,
jaki rodzaj animacji przejścia należy zastosować dla tworzonej transakcji:
transaction.setTransition(transition);
Parametr
transition
określa tu typ animacji. Może on przyjmować
następujące wartości:
TRANSIT_FRAGMENT_CLOSE
(fragment jest
usuwany ze stosu),
TRANSIT_FRAGMENT_OPEN
(fragment jest
dodawany),
TRANSIT_FRAGMENT_FADE
(fragment powinien być
stopniowo wygaszany i włączany)
TRANSIT_NONE
(brak animacji).
Domyślnie żadne animacje nie są stosowane.
Po określeniu wszystkich akcji, które chcemy wykonać w ramach
transakcji, należy wywołać metodę
addToBackStack()
powoduje
ona dodanie transakcji do stosu cofnięć. Metoda ta ma tylko jeden
parametr: łańcuch znaków określający nazwę transakcji. Parametr ten
okaże się przydatny wtedy, kiedy będziemy chcieli pobrać transakcję
programowo. W większości przypadków nie będziemy musieli tego
robić, więc w wywołaniu metody
addToBackStack()
z powodzeniem
możemy przekazać wartość
null
:
Określanie animacji przejścia nie jest obowiązkowe.
W przeważającej większości przypadków
pobieranie transakcji nie będzie konieczne,
więc możemy przekazywać tu wartość null.
2. Określ zmiany
Po rozpoczęciu transakcji należy określić zmiany, które mają zostać w niej
zarejestrowane.
Na przykład aby dodać określony fragment do układu, należy wywołać metodę
add()
transakcji fragmentu. Metoda ta ma dwa parametry: identyfikator zasobu
grupy widoków, do której chcemy dodać fragment, oraz dodawany fragment.
A zatem cały kod wygląda tak, jak pokazano w poniższym przykładzie:
WorkoutDetailFragment fragment = new WorkoutDetailFragment();
transaction.add(R.id.fragment_container, fragment);
Z kolei, aby zastąpić jeden fragment innym, należy użyć metody
replace()
:
transaction.replace(R.id.fragment_container, fragment);
Natomiast do całkowitego usuwania fragmentów służy metoda
remove()
:
transaction.remove(fragment);
Tworzy fragment.
Dodaje fragment do obiektu ViewGroup.
Zastępuje jeden
fragment drugim.
Usuwa fragment.
¨
Utworzenie AVD
¨
Utworzenie układu
¨
Wyświetlenie treningu
Fragmenty dla większych interfejsów
421
jesteś tutaj
¨
Utworzenie AVD
¨
Utworzenie układu
¨
Wyświetlenie treningu
public void itemClicked(long id) {
View fragmentContainer = findViewById(R.id.fragment_container);
if (fragmentContainer != null) {
WorkoutDetailFragment details = new WorkoutDetailFragment();
FragmentTransaction ft = getSupportFragmentManager(). .............. ;
details.setWorkout(id);
ft. .............. (R.id.fragment_container, .............. );
ft. .............. (FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft. .............. (null);
ft. .............. ;
} else {
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra(DetailActivity.EXTRA_WORKOUT_ID, (int) id);
startActivity(intent);
}
}
Nie będziesz
potrzebował wszystkich
magnesików.
commit()
setTransition
beginTransaction()
replace
details
addToBackStack
startTransaction()
endTransaction()
Magnesiki aktywności
Chcemy napisać nową wersję metody
itemClicked()
aktywności
MainActivity
. Jej zadaniem
ma być zmienianie szczegółowych informacji o treningu wyświetlanych we fragmencie
WorkoutDetailFragment
za każdym razem, gdy użytkownik kliknie nowy trening na liście.
Sprawdźmy, czy będziesz potrafił uzupełnić zamieszczony poniżej kod.
3. Zatwierdź transakcję
I w końcu transakcję należy zatwierdzić. Operacja ta spowoduje zakończenie transakcji
oraz zastosowanie wszystkich określonych w niej modyfikacji. Transakcję można
zatwierdzić, wywołując metodę
commit()
, jak pokazano w poniższym przykładzie:
transaction.commit();
To już wszystko, co trzeba wiedzieć, by utworzyć transakcję fragmentu. Spróbujmy
zatem zastosować tę wiedzę w praktyce — zaktualizujemy teraz kod aktywności
MainActivity
w taki sposób, by wyświetlał zaktualizowaną wersję fragmentu
WorkoutDetailFragment
za każdym razem, gdy użytkownik kliknie nowy trening.
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.