Lekcja 6.1. Tworzenie fragmentu

> Dodaj do ulubionych

W tej lekcji:

  1. Tworzenie klasy Fragment
  2. Dodawanie fragmentu do aktywności za pomocą XML

Do przeczytania:

Do wypróbowania:

Pobierz przykładowy interfejs.

Fragment można rozumieć jako moduł aktywności, który ma swój własny cykl życia, otrzymuje własne zdarzenia i który można dodawać bądź usuwać w czasie działania aktywności. To coś w rodzaju aktywności podrzędnej, którą można wykorzystywać w różnych aktywnościach. W tej lekcji dowiesz się, jak rozszerzyć klasę Fragment korzystając z biblioteki pomocniczej, dzięki czemu twoja aplikacja będzie zgodna z urządzeniami na których zainstalowane są starsze wersje systemu, poczynając od Androida 1.6.

Jeśli zdecydujesz, że wymagana przez aplikację wersja API ma mieć numer 11 lub wyższy, nie będziesz potrzebować biblioteki pomocniczej. Zamiast niej możesz skorzystać z wbudowanej w szkielet platformy klasy Fragment i powiązanych z nią API. Pamiętaj tylko, że w poniższej lekcji skupiono się na wykorzystaniu API dostępnych w bibliotece pomocniczej, które mają konkretne sygnatury pakietów, a czasem też inne nazwy niż wersje dostępne w platformie.

Przed rozpoczęciem lekcji musisz tak skonfigurować projekt, by korzystał z biblioteki pomocniczej. Jeśli do tej pory z niej nie korzystałeś, to dodaj bibliotekę v4 postępując zgodnie z instrukcjami w dokumencie Konfiguracja biblioteki pomocniczej (ang.). Możesz także skorzystać z biblioteki v7 appcompat, która umożliwi dodanie do aktywności paska akcji. Biblioteka ta jest zgodna z Androidem 2.1 (wersja 7 API), a także zawiera API klasy Fragment.

Tworzenie klasy fragmentu

By utworzyć fragment, należy rozszerzyć klasę Fragment, a następnie przedefiniować kluczowe metody cyklu życia i umieścić w nich kod sterujący zachowaniem aplikacji, tak jak w przypadku klasy Activity.

Różnica polega na tym, że podczas tworzenia fragmentu musisz uwzględnić metodę zwrotną onCreateView(), umożliwiającą zdefiniowanie układu aplikacji. Tak naprawdę jest to jedyna metoda zwrotna potrzebna do uruchomienia fragmentu. Oto prosty przykładowy fragment, który definiuje swój układ:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // dodaje układ fragmentu za pomocą metody inflate()
        return inflater.inflate(R.layout.article_view, container, false);
    }
}

Tak jak każda aktywność, fragment powinien mieć zaimplementowane również inne metody zwrotne cyklu życia, które umożliwią zarządzanie jego stanem, gdy zostanie dodany lub usunięty z aktywności, a także gdy aktywność będzie przechodzić pomiędzy swoimi stanami cyklu życia. Przykład: wywołanie na aktywności metody onPause() spowoduje jednoczesne wywołanie tej metody na wszystkich znajdujących się w aktywności fragmentach.

Więcej informacji na temat cyklu życia fragmentu i jego metod zwrotnych znajdziesz w przewodniku programisty poświęconemu fragmentom.

Dodawanie fragmentu do aktywności za pomocą XML

Fragmenty stanowią modułowe komponenty interfejsu nadające się do wielokrotnego użytku, jednak każda instancja klasy Fragment musi być skojarzona z nadrzędną klasą FragmentActivity. Można to zrobić poprzez zdefiniowanie każdego fragmentu w pliku XML zawierającym szablon aktywności.

FragmentActivity to specjalna aktywność dostępna w bibliotece pomocniczej, służąca do obsługiwania fragmentów w systemach korzystających ze starszych API niż wersja 11. Jeśli API w najniższej obsługiwanej przez aplikację wersji systemu ma numer 11 lub wyższy to można wówczas korzystać ze zwykłych aktywności.

Oto przykładowy plik z układem, w którym do aktywności dodawane są dwa fragmenty, jeśli aplikacja została uruchomiona na „dużym” ekranie (rozmiar ten określa kwalifikator large w nazwie katalogu).

res/layout-large/news_articles.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>
Więcej informacji na temat tworzenia układów pod różne ekrany znajdziesz w lekcji Obsługa różnych ekranów.

Następnie dodaj układ do aktywności:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_articles);
    }
}

Jeśli korzystasz z biblioteki v7 appcompat, aktywność powinna rozszerzać klasę ActionBarActivity, która jest podklasą klasy FragmentActivity (więcej na ten temat możesz przeczytać w lekcji Dodawanie paska akcji).

Fragment dodany do szablonu aktywności poprzez zdefiniowanie w pliku XML szablonu nie może zostać usunięty w czasie wykonywania. Jeśli więc planujesz podmieniać fragmenty w czasie gdy użytkownik będzie korzystał z aplikacji, to musisz dodać fragment do aktywności podczas jej pierwszego uruchomienia. Przeczytasz o tym w następnej lekcji.

Autor: Google

Źródło: http://developer.android.com/training/basics/fragments/creating.html

Tłumaczenie: Joanna Liana

Treść tej strony jest dostępna na zasadach licencji CC BY 2.5