444
Rozdział 11.
Kod StopwatchFragment
Kod fragmentu StopwatchFragment
Teraz dodamy do naszego projektu aplikacji Trenażer fragment
StopwatchFragment
,
tak byśmy mogli go zastosować w aplikacji. Zrobimy to dokładnie w taki sam sposób,
w jaki dodaliśmy fragmenty w rozdziale 9.
Zaznacz pakiet
com.hfad.trenazer
umieszczony
w katalogu
app/src/main/java
, po czym wybierz
z menu opcję File/New…/Fragment/
Fragment (Blank). Tworzonemu fragmentowi nadaj nazwę StopwatchFragment, a używanemu
przez niego układowi nazwę
fragment_stopwatch; usuń także zaznaczenia z pól wyboru
umożliwiających wygenerowanie metod wytwórczych i funkcji zwrotnych interfejsu.
Po kliknięciu przycisku
Finish Android Studio wygeneruje nowy fragment, zapisany w pliku
StopwatchFragment.java umieszczonym w katalogu app/src/main/java. Teraz zastąp zawartość
tego pliku wygenerowaną przez Android Studio poniższym kodem (to zaktualizowany kod
aktywności, który zmodyfikowaliśmy w ramach ostatniego ćwiczenia):
package com.hfad.trenazer;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import.java.util.Locale;
public class StopwatchFragment extends Fragment {
// Liczba sekund wyświetlana przez stoper
private int seconds = 0;
// Czy stoper działa?
private boolean running;
private boolean wasRunning;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
seconds = savedInstanceState.getInt(”seconds”);
running = savedInstanceState.getBoolean(”running”);
wasRunning = savedInstanceState.getBoolean(”wasRunning”);
}
}
app/src/main
Stopwatch
Fragment.java
Trenazer
java
com.hfad.trenazer
Liczba zmierzonych sekund.
Zmienna running informuje, czy stoper
aktualnie działa, czy nie.
Odtworzenie wartości zmiennych
zapisanych w parametrze
savedInstanceState typu Bundle.
Zmienna wasRunning informuje,
czy przed wstrzymaniem
aktywności stoper działał, czy nie.
¨
Konwersja stopera
¨
Testy stopera
¨
Dodanie do fragmentu
Dalsza część kodu
znajduje się na
następnej stronie.
Fragmenty dynamiczne
445
jesteś tutaj
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_stopwatch, container, false);
runTimer(layout);
return layout;
}
@Override
public void onPause() {
super.onPause();
wasRunning = running;
running = false;
}
@Override
public void onResume() {
super.onResume();
if (wasRunning) {
running = true;
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt(”seconds”, seconds);
savedInstanceState.putBoolean(”running”, running);
savedInstanceState.putBoolean(”wasRunning”, wasRunning);
}
public void onClickStart(View view) {
running = true;
}
app/src/main
Stopwatch
Fragment.java
Trenazer
java
com.hfad.trenazer
Metoda określa układ fragmentu
i wywołuje metodę runTimer(),
przekazując do niej obiekt układu.
Jeśli działanie fragmentu
zostało wstrzymane, zapisujemy,
czy stoper był włączony,
po czym go zatrzymujemy.
Jeśli stoper działał, zanim został
wstrzymany, to tutaj go ponownie
uruchamiamy.
Ta metoda zapisuje
wartości zmiennych
w obiekcie Bundle
przed usunięciem
aktywności. Są one
używane w przypadku,
gdy użytkownik zmieni
orientację urządzenia.
Ten kod ma zostać wykonany, kiedy
użytkownik kliknie przycisk Start.
¨
Konwersja stopera
¨
Testy stopera
¨
Dodanie do fragmentu
Dalsza część kodu
znajduje się na
następnej stronie.
Kod fragmentu StopwatchFragment (ciąg dalszy)
446
Rozdział 11.
Ciąg dalszy kodu
public void onClickStop(View view) {
running = false;
}
public void onClickReset(View view) {
running = false;
seconds = 0;
}
private void runTimer(View view) {
final TextView timeView = (TextView) view.findViewById(R.id.time_view);
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
int hours = seconds / 3600;
int minutes = (seconds % 3600) / 60;
int secs = seconds % 60;
String time = String.format(”%d:%02d:%02d”,
hours, minutes, secs);
timeView.setText(time);
if (running) {
seconds++;
}
handler.postDelayed(this, 1000);
}
});
}
}
app/src/main
Stopwatch
Fragment.java
Trenazer
java
com.hfad.trenazer
Ten kod ma zostać wykonany
po kliknięciu przycisku Stop.
Ten kod ma zostać wykonany
po kliknięciu przycisku Kasuj.
Umieszczenie kodu w obiekcie Handler
oznacza, że będzie on mógł być
wykonywany w wątku działającym w tle.
Wyświetlamy liczbę sekund
zmierzonych przez stoper.
Jeśli stoper działa, to ta instrukcja
inkrementuje liczbę zmierzonych sekund.
Kod w obiekcie Handler ma być
wykonywany co sekundę.
To już cały kod niezbędny do zapewniania prawidłowego
funkcjonowania fragmentu
StopwatchFragment
. Naszym kolejnym
zadaniem będzie określenie wyglądu fragmentu, a zrobimy to,
modyfikując plik układu wygenerowany przez Android Studio.
Kod fragmentu StopwatchFragment (ciąg dalszy)
¨
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.