Мой вопрос, помимо очевидных различий в наследовании, каковы основные различия между 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.FragmentManagergetLoaderManager() получить 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, есть много примеров.