Мой вопрос, помимо очевидных различий в наследовании, каковы основные различия между Fragment
и FragmentActivity
? Для каких сценариев лучше всего подходит каждый класс? Я пытаюсь понять, почему существуют оба этих класса ...
Мой вопрос, помимо очевидных различий в наследовании, каковы основные различия между Fragment
и FragmentActivity
? Для каких сценариев лучше всего подходит каждый класс? Я пытаюсь понять, почему существуют оба этих класса ...
Ответы:
A Fragment
является частью Activity
, которая имеет:
Activity
работы.A Fragment
всегда должен быть встроен в Activity
.
Fragments
не являются частью API до HoneyComb (3.0). Если вы хотите использовать Fragments
приложение, ориентированное на версию платформы до HoneyComb, вам необходимо добавить пакет поддержки в ваш проект и использовать его FragmentActivity
для хранения Fragments
. FragmentActivity
Класс имеет API для работы с Fragments
, в то время как Activity
класс, до Honeycomb, не делает.
Если ваш проект ориентирован только на HoneyComb или новее, вы должны использовать его, Activity
а не FragmentActivity
удерживать его Fragments
.
Некоторые детали:
Используйте android.app.Fragment
с Activity
. Используйте android.support.v4.app.Fragment
с FragmentActivity
. Не добавляйте пакет поддержки Fragment
в, так Activity
как это вызовет исключение.
С чем следует быть осторожным, FragmentManager
и LoaderManager
иметь отдельные версии поддержки для FragmentActivity:
Если вы используете Fragment
в Activity
(HoneyComb и выше), позвоните
getFragmentManager()
получить android.app.FragmentManager
getLoaderManager()
получить android.app.LoaderManager
если вы используете Fragment
в FragmentActivity
(до HoneyComb), позвоните:
getSupportFragmentManager()
чтобы получить android.support.v4.app.FragmentManager
.getSupportLoaderManager()
получить android.support.v4.app.LoaderManager
так что не делай
//don't do this
myFragmentActivity.getLoaderManager();
//instead do this:
myFragmentActivity.getSupportLoaderManager();
или
//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()
Также полезно знать, что хотя фрагмент должен быть встроен в Activity
него, он не обязательно должен быть частью Activity
макета. Он может использоваться как невидимый работник для действия без собственного пользовательского интерфейса.
FragmentActivity - это наша классическая активность с поддержкой фрагментов, не более того. Поэтому FragmentActivity необходима, когда фрагмент будет присоединен к Activity.
Well Fragment - это хороший компонент, который копирует базовое поведение Activity, но все еще не является отдельным компонентом приложения, таким как Activity, и для работы его необходимо подключить к Activity.
Смотрите здесь для более подробной информации
Думайте о FragmentActivity как о обычном классе Activity, который может поддерживать фрагменты. До появления соты класс действий не мог напрямую передавать фрагменты, поэтому это необходимо в действиях, использующих фрагменты.
Если целевым дистрибутивом является Honeycomb и выше, вы можете выйти за пределы Activity.
Также фрагмент должен рассматриваться как «подвид деятельности». Он не может существовать без активности. Всегда думайте о фрагменте как о подвиде деятельности, и вы должны быть хорошими. Таким образом, действие будет родительским, а фрагмент (ы) - дочерним типом символических отношений.
FragmentActivity - это специальное действие, которое содержит Fragment. В этих нескольких словах я объясню вам одно из главных важных изменений, которое с android 3.0 (HoneyComb), команда android вставила в Android SDK.
С этим новым видом концепции ваши фрагменты кода и компоновки становятся более гибкими и обслуживаемыми. Если вы ищете в Google, есть много примеров.