Fragmenty dynamiczne
469
jesteś tutaj
Urządzenie
Stopwatch
Fragment.java
MainActivity.java
WorkoutDetail
Fragment.java
WorkoutList
Fragment.java
Po uruchomieniu aplikacji zostanie wyświetlona aktywność MainActivity.
Aktywność
MainActivity
zawiera fragment
WorkoutListFragment
,
który prezentuje listę treningów.
Użytkownik klika trening, co powoduje wyświetlenie fragmentu
WorkoutDetailFragment.
Fragment
WorkoutDetailFragment
wyświetla szczegółowe informacje
o treningu i zawiera fragment
StopwatchFragment
.
Fragment StopwatchFragment wyświetla stoper.
Uprościliśmy tu nieco
strukturę aplikacji,
jednak tak wyglądają jej
kluczowe punkty.
Przyjrzymy się tym wszystkim etapom na następnej stronie.
Fragment
WorkoutListFragment
zawiera listę treningów.
Kiedy użytkownik
kliknie jeden
z treningów, aplikacja
wyświetla fragment
WorkoutDetailFragment,
a w nim szczegółowe
informacje o treningu.
Do fragmentu
WorkoutDetailFragment
mamy zamiar
dodać fragment
StopwatchFragment,
aby poniżej ćwiczeń
wyświetlić stoper.
Oto jak aplikacja będzie działać:
Dodanie stopera do fragmentu WorkoutDetailFragment
Teraz zajmiemy się dodaniem nowego fragmentu
StopwatchFragment
do fragmentu
WorkoutDetailFragment
, tak by stoper był wyświetlany poniżej informacji o treningu.
Stoper będzie wyświetlany pod ćwiczeniami za każdym razem, gdy użytkownik wybierze
trening z listy.
1
2
3
470
Rozdział 11.
Etapy
Oto co mamy zamiar zrobić
Przygotowanie i uruchomienie nowej wersji aplikacji wymaga
wykonania jedynie dwóch czynności.
Wyświetlenia aktywności MainActivity podczas uruchamiania aplikacji.
We wcześniejszej części rozdziału tymczasowo zmieniliśmy aplikację w taki sposób, by
podczas jej uruchamiania była wyświetlania aktywność
TempActivity
. Teraz ponownie
musimy ją zmienić, by początkowo była uruchamiana aktywność
MainActivity
.
Dodania fragmentu StopwatchFragment do fragmentu WorkoutDetailFragment.
Użyjemy do tego transakcji fragmentu.
A zatem do dzieła.
Wyświetlanie MainActivity podczas uruchamiania aplikacji
Na początku rozdziału zmieniliśmy plik manifestu, AndroidManifest.xml, tak by
po uruchomieniu aplikacji była wyświetlana aktywność
TempActivity
. Ułatwiło
nam to testowanie i uruchomienie fragmentu
StopwatchFragment
przed jego
dodaniem do fragmentu
WorkoutDetailFragment
.
Teraz, kiedy fragment stopera już działa, musimy zadbać o to, by podczas
uruchamiania aplikacji ponownie była wyświetlana aktywność
MainActivity
.
W tym celu musimy wprowadzić w pliku AndroidManifest.xml poniższe zmiany:
...
<application
...
<activity android:name=”.MainActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”.DetailActivity” />
<activity android:name=”.TempActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
...
Usuń filtr intencji z elementu
dotyczącego aktywności
TempActivity.
Dodaj filtr intencji, by
uruchamiać aktywność
MainActivity podczas
uruchamiania aplikacji.
<xml>
</xml>
app/src/main
AndroidManifest.xml
Trenazer
¨
Konwersja stopera
¨
Testy stopera
¨
Dodanie do fragmentu
2
1
Fragmenty dynamiczne
471
jesteś tutaj
Dodaj FrameLayout w miejscu,
gdzie ma być wyświetlany fragment
Następnym zadaniem jest dodanie fragmentu
StopwatchFragment
do fragmentu
WorkoutDetailFragment
. W tym celu dodamy do pliku fragment_workout_detail.xml
układ
FrameLayout
; zrobimy to dokładnie tak samo jak w pliku activity_temp.xml.
Dzięki temu będziemy mogli dodać
StopwatchFragment
do fragmentu
WorkoutDetailFragment
, używając przy tym transakcji fragmentu.
Poniżej przedstawiliśmy naszą wersję pliku
fragment_workout_detail.xml;
zaktualizuj swoją, by była identyczna z naszą.
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_height=”match_parent”
android:layout_width=”match_parent”
android:orientation=”vertical”>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:textAppearance=”?android:attr/textAppearanceLarge”
android:id=”@+id/textTitle” />
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:id=”@+id/textDescription” />
<FrameLayout
android:id=”@+id/stopwatch_container”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />
</LinearLayout>
<xml>
</xml>
app/src/main
fragment_
workout_detail.xml
Trenazer
res
layout
Teraz pozostaje już jedynie dodać transakcję fragmentu
do kodu klasy
WorkoutDetailFragment
.
To jest FrameLayout,
w którym umieścimy
fragment stopera.
Tytuł treningu.
Opis treningu.
¨
Konwersja stopera
¨
Testy stopera
¨
Dodanie do fragmentu
Ogólna agonia
100 podciągnięć,
100 pompek,
100 brzuszków,
100 przysiadów.
472
Rozdział 11.
Transakcje fragmentów
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
if (savedInstanceState == null) {
StopwatchFragment stopwatch = new StopwatchFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.stopwatch_container, stopwatch);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
}
Jak na razie transakcji fragmentów
używaliśmy tylko w aktywnościach
We wcześniejszej części rozdziału użyliśmy poniższego kodu, by
dodać fragment
StopwatchFragment
do aktywności
TempActivity
:
app/src/main
TempActivity.java
Trenazer
com.hfad.trenazer
Powyższy kod sprawdził się doskonale w przypadku dodawania
fragmentu
StopwatchFragment
do aktywności. Jak trzeba go
będzie zmienić teraz, kiedy chcemy dodać ten sam fragment do
innego
fragmentu?
Stosowanie transakcji fragmentów we
fragmentach wymaga prawie identycznego kodu
Na szczęście okazuje się, że możemy użyć niemal identycznego
kodu, by stosować transakcje fragmentów wewnątrz fragmentów.
Jest tylko jedna, kluczowa różnica: fragmenty nie dysponują
metodą o nazwie
getSupportFragmentManager()
, dlatego
musimy zmodyfikować poniższy wiersz kodu:
Aby utworzyć transakcję fragmentu, musimy pobrać referencję do
menedżera fragmentów. Fragmenty udostępniają
dwie metody,
których można do tego użyć:
getFragmentManager()
oraz
getChildFragmentManager()
. A jaka jest różnica pomiędzy nimi
i której z nich powinniśmy użyć w tworzonej aplikacji?
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Ten fragment kodu
dodaje fragment
StopwatchFragment do
aktywności TempActivity
podczas jej tworzenia.
¨
Konwersja stopera
¨
Testy stopera
¨
Dodanie do fragmentu
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.