Статьи

Android From Scratch: действия и фрагменты

Когда пользователь взаимодействует с приложением на устройстве Android, он почти всегда взаимодействует с Activity , единственным сфокусированным экраном на устройстве. После того, как Google выпустил версию Android с Fragment интерфейсом, в операционную систему были добавлены объекты Fragment чтобы упростить повторное использование кода и изменение содержимого на экране без необходимости каждый раз уничтожать / перестраивать новую Activity .

В этом руководстве вы узнаете больше об объектах Activity и Fragment в Android, их жизненных циклах, а также о том, когда и как их следует использовать в своих собственных приложениях.

Тебе легче учиться с видео? Почему бы не проверить наш курс:

  • Android
    Начало работы с Android

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

Когда у вас есть созданный класс Activity , вручную или с помощью одного из шаблонов Android Studio, вам необходимо определить его в файле AndroidManifest.xml проекта, если он еще не был добавлен, например:

1
2
3
4
5
6
7
<activity android:name=».MainActivity»>
    <intent-filter>
        <action android:name=»android.intent.action.MAIN» />
 
        <category android:name=»android.intent.category.LAUNCHER» />
    </intent-filter>
</activity>

В приведенном выше фрагменте вы также заметили тег intent-filter с элементом action и category . Хотя подробное описание этих элементов выходит за рамки данного учебного пособия, вы должны знать, что из этих дополнительных строк система узнает, какую Activity сначала нужно открыть, когда пользователь выбирает ваше приложение.

Создав действие, вы, вероятно, захотите связать его с файлом XML макета, чтобы вы могли легко использовать просмотр объектов из макета. Вы можете сделать это в onCreate() .

1
2
3
4
5
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

После вызова setContentView() вы можете начать ссылаться на объекты View из XML-файла макета.

В этот момент вы, вероятно, задаетесь вопросом, что такое onCreate() и почему мы его используем. Метод onCreate() является одним из методов, связанных с жизненным циклом Activity . Он вызывается при первом создании Activity . Здесь вы можете выполнить некоторые из ваших общих шагов инициализации в вашей Activity поскольку она гарантированно будет вызвана первой в жизненном цикле Activity как вы можете видеть ниже.

Диаграмма жизненного цикла активности Android
Источник: Google Developer Website

Приведенная выше диаграмма показывает порядок методов, вызываемых как Activity покидают или входят в различные возможные состояния:

  • onCreate() вызывается немедленно, когда Activity , как следует из названия, создается. onDestroy() соотносится с противоположной операцией и вызывается, когда действие удаляется из памяти устройства. Есть несколько небольших случаев, когда onDestroy() может не вызываться, но они выходят за рамки этого руководства.
  • onStart() вызывается, когда Activity становится видимым для пользователя, а onStop() вызывается, когда эта Activity больше не видна. Эти два могут быть вызваны, когда приложение помещается в фоновый режим с помощью кнопки «Домой» на устройстве и когда приложение возвращается на передний план.
  • onResume() и onPause() связаны с тем, что Activity находится на переднем плане. Если другой компонент выходит на передний план, такой как диалог или другое действие, то эта часть жизненного цикла запускается.

Понимание того, когда каждый из этих методов вызывается, избавит вас от многих головных болей по мере разработки, и вам придется разрушать / перераспределять ресурсы в своих приложениях.

Теперь, когда вы немного узнали о жизненном цикле действия, пришло время разобраться с тем, что происходит, когда действие уничтожается и воссоздается системой. Это может произойти в нескольких ситуациях, наиболее распространенных при повороте экрана.

Действие проходит стандартный процесс onStop() , onPause() , onDestroy() , а затем onCreate() при создании нового экземпляра этого Activity .

Другой метод, который не показан на диаграмме выше, это onSaveInstanceState() . Этот метод вызывается, поскольку действие уничтожается и позволяет сохранять простую информацию в комплекте. Когда onCreate() вызывается снова, вы можете извлечь ту информацию, которую вы сохранили ранее. То же самое можно сделать из onRestoreInstanceState() .

Представленные в Android 3.0 (Honeycomb), объекты Fragment представляют собой удивительный инструмент, который обрабатывает множество ситуаций, которые были проблематичными, когда были доступны только классы Activity . Фрагменты позволяют организовать компоненты пользовательского интерфейса проекта для различных устройств, предоставляя вам возможность отображать несколько сегментов пользовательского интерфейса на большом экране, например на планшете, или показывать по одному за раз и связывать их вместе на небольших мобильных устройствах.

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

Как и класс Activity класс Fragment имеет свой собственный жизненный цикл, который помогает управлять Fragment с момента его прикрепления к Activity до его уничтожения. Понимание этого жизненного цикла помогает вам создавать стабильные приложения, а также помогает в отладке.

Диаграмма жизненного цикла фрагмента Android
Источник: Google Developer Website
  • onAttach() и onDetach() сигнализируют, когда фрагмент был добавлен в Activity и этот фрагмент можно использовать в приложении.
  • onCreate() вызывается как метод инициализации для классов Fragment а onDestroy() является эквивалентным деинициализатором.
  • onCreateView() — это метод, в котором вы создаете экземпляр макета и onCreateView() объекты для фрагмента. onDestroyView() вызывается, когда иерархия представления, связанная с фрагментом, удаляется.
  • onStart() и onStop() действуют аналогично своим аналогам жизненного цикла Activity . Эти методы запускаются, когда Fragment становится или перестает быть видимым соответственно.
  • onPause() и onStart() также похожи на аналоги Activity . Когда Fragment виден, но его фокус изменился, вызывается один из этих двух методов.

Хотя класс Fragment по-своему мощен, он не может полностью реализовать свой потенциал, не будучи расширенным для удовлетворения целей вашего приложения. К счастью, Google предоставил множество различных дочерних классов Fragment чтобы помочь разработчикам быстро создавать великолепные приложения.

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

Этот Fragment имеет встроенный ListView и некоторые вспомогательные методы для выделения этого компонента, такие как неопределенный ProgressBar (круговой, вращающийся виджет загрузки) и TextView для отображения текста, когда List пуст.

Это бесценный Fragment который оборачивает MapView для использования со службой Google Maps. Вместо того, чтобы писать весь свой собственный код, вы можете расширить этот Fragment чтобы добавить функциональность базовой карты в ваше приложение.

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

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

Продолжая работать с Android, вы увидите и узнаете о множестве различных классов Activity и Fragment , которые вам доступны, и вы, без сомнения, создадите свой собственный.