Создание фрагментов в Android

Вы можете думать о фрагменте как о модульной части activity , которая имеет свой жизненный цикл, получает собственные события ввода, и который вы можете добавить или удалить в то время как activity работает (как бы “вложенная activity “, которую вы можете использовать повторно в различных activity ). Этот урок показывает, как можно расширить Fragment класс используя Библиотеку Поддержки так, чтобы ваше приложение оставалось совместимым с устройствами под управлением старых версий систем вплоть до Android 1.6.

Примечание: Если вы решили, что минимальный требуемый уровень API вашего приложения 11 или выше, вам не нужно использовать Библиотеку поддержки, и вместо неё можно использовать встроенную функциональность Fragment класса и связанные с ним API. Только знайте, что этот урок ориентирован на использование API из Библиотеки поддержки, которые используют определенную сигнатуру пакета и иногда слегка разные имена API, чем в версии включенной в платформу.

Прежде чем начать этот урок, вы должны настроить Android проект для использования Библиотеки поддержки. Если вы не использовали библиотеку поддержки прежде, настройте проект для использования v4 библиотеки, следуя документу Настройка Библиотека Поддержки . Тем не менее, вы можете также добавить Панель действий в вашу activity , используя вместо этого библиотеку v7 appcompat , которая совместима с Android 2.1 (Уровень API 7), и также включает в себяFragment API.

[wpanchor id=”1″]

 

Создание класса фрагмента


Чтобы создать фрагмент, расширьте Fragment класс, и затем перегрузите ключевые методы жизненного цикла для вставки логики в ваше приложение, подобно работе с Activity классом.

Одно из различий при создании Fragment это то, что вы должны использовать onCreateView()метод обратного вызова, чтобы задать макет. На самом деле, это единственный метод обратного вызова нужный вам для работы фрагмента. Например, вот простой фрагмент, который определяет свой собственный макет:

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) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.article_view, container, false);
    }
}

 

Так же как активити, фрагмент должны реализовывать другие методы обратного вызова жизненного цикла, которые позволяют управлять его состоянием, таким как его добавление или удаление из активити, и для обработки переходов между состояниями жизненного цикла активити. Например, когда для активити вызывается onPause() метод, все фрагменты этой активити также получат вызов onPause().

Более подробная информация о жизненном цикле фрагментов и методах обратного вызова доступна в Фрагменты (руководство разработчика).

[wpanchor id=”2″]

 

Добавить фрагмент к activity с помощью XML


В то время как фрагменты многоразовые модульные компоненты пользовательского интерфейса, каждый экземпляр Fragment класса должен быть связан с родительской FragmentActivity. Вы можете достичь этой связи путем определения каждого фрагмента в пределах XML файла макета вашей activity .

Примечание: FragmentActivity это специальная activity , предоставляемая Библиотекой поддержки для работы с фрагментами на системе версии ниже уровня API 11. Если минимальная версия системы, которую вы поддерживаете уровня API 11 или выше, то вы можете использовать обычный Activity.

Вот пример файла макета, который добавляет два фрагмента к activity , когда экран устройства считается “большим” (заданный с помощью large спецификатора в имени каталога).

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>

Полезный совет: Для дополнительной информации о создании макетов для различных размеров экрана, читайте Поддержка различных размеров экрана.

Затем примените макет к своей activity :

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);
    }
}

 

Примечание: Когда вы добавляете фрагмент в макет activity , задавая фрагмент в XML файле макета, вы не можете удалить фрагмент во время выполнения. Если вы планируете менять свои фрагменты в и во время взаимодействия с пользователем, необходимо добавлять фрагмент в activity при первом запуске activity, как показано в следующем уроке.

 

Коментарі: 1
  1. 4465577

    Добрый день. В образце нет build.gradle. Подскажите пожалуйста, его надо как-то самостоятельно создавать?

Додати коментар