Fragments

В Android 3.0 реализованы классы Fragment (фрагменты). Они обеспечивают поддержку более гибких схем размещения элементов на экранах различных размеров на телефонах и планшетах. В этой статье рассматривается разработка приложений Xamarin.Android с использованием фрагментов, а также поддержка фрагментов на устройствах с версией Android ниже 3.0 (API уровня 11).

Общие сведения о фрагментах

Крупные размеры экрана на большинстве планшетов создают дополнительный уровень сложности при разработке приложений Android: макет, предназначенный для небольших экранов, не обязательно будет работать на экранах большего размера, и наоборот. Чтобы сократить количество связанных с этим сложностей, в Android 3.0 были реализованы две новые возможности: фрагменты и пакеты поддержки.

Фрагменты можно считать модулями пользовательского интерфейса. Они позволяют разработчику разделить пользовательский интерфейс на удобные для многократного использования изолированные части, которые могут выполняться в отдельных действиях. Во время выполнения действия сами выбирают, какие фрагменты будут использоваться.

Пакеты поддержки, которые сначала назывались библиотеками совместимости, обеспечивают использование фрагментов на устройствах с версиями Android ниже 3.0 (API уровня 11).

Например, на рисунке ниже показано, как фрагменты используются в одном приложении на устройствах различных форм-факторов.

Diagram of how fragments are used in Tablets and Handsets

Фрагмент A содержит список, а фрагмент B — подробные сведения об элементе, выбранном из этого списка. Когда приложение запускается на планшете, оба фрагмента могут отображаться в одном действии. Если это же приложение запускается на телефоне (с экраном меньшего размера), фрагменты размещаются в двух отдельных действиях. Фрагменты A и B одинаковы для обоих форм-факторов, а действия, в которых они размещаются, различаются.

Чтобы упростить для действий координацию всех этих фрагментов и управление ими, в Android реализован новый класс FragmentManager. В каждом действии есть отдельный экземпляр FragmentManager для добавления, удаления и поиска размещенных фрагментов. На следующей схеме показана связь между фрагментами и действиями.

Diagram illustrating relationships between Activity, Fragment Manager, and Fragments

В некотором смысле фрагменты можно рассматривать как составные элементы управления или как мини-действия. Они группируют элементы пользовательского интерфейса в многократно используемые модули, которые затем могут по отдельности использоваться разработчиками в действиях. У фрагментов, как и у действий, есть иерархия представлений, но, в отличие от действий, их можно совместно использовать на разных экранах. Представления отличаются от фрагментов тем, что у фрагментов есть определенный жизненный цикл, а у представлений его нет.

Хотя в действии размещаются один или несколько фрагментов, в нем не учитываются сведения непосредственно о самих фрагментах. Точно так же и фрагменты "не знают" непосредственно о других фрагментах в действии, где они размещены. Однако фрагменты и действия осведомлены о FragmentManager в соответствующем действии. С помощью FragmentManager для действия или фрагмента можно получить ссылку на конкретный экземпляр фрагмента, а затем вызвать методы для этого экземпляра. Таким образом действия или фрагменты могут взаимодействовать с другими фрагментами.

Руководство по фрагментам содержит исчерпывающее описание их использования, в том числе сведения по следующим темам:

  • Создание фрагментов — создание базового фрагмента и ключевых методов, которые необходимо реализовать.
  • Управление фрагментами и транзакции с ними — управление фрагментами во время выполнения.
  • Пакет поддержки Android — использование библиотек, позволяющих использовать фрагменты в предыдущих версиях Android.

Требования

Фрагменты доступны в пакете SDK для Android начиная с API уровня 11 (Android 3.0), как показано на следующем снимке экрана:

Selecting the API level in the Android SDK Manager

Фрагменты доступны в Xamarin.Android 4.0 и более поздних версиях. Для использования фрагментов приложение Xamarin.Android должно быть разработано по меньшей мере для уровня API 11 (Android 3.0) или выше. Целевую платформу можно задать в свойствах проекта, как показано на снимке экрана ниже.

Setting the Target Framework API level in the Project Options

Фрагменты можно использовать в более ранних версиях Android с помощью пакета поддержки Android и Xamarin.Android 4.2 или более поздней версии. Сведения о том, как это сделать, подробно описаны в документах, указанных в этом разделе.