Что ж, заголовок вполне ясен, в чем разница между Fragment и FragmentActivity?
Я хотел бы знать, что является лучшим вариантом для следующего случая: у меня есть два фрагмента и в основном действии (с NavigationView), в котором будет загружен тот или иной фрагмент (не оба одновременно).
Я также подумал об использовании ViewPager для управления фрагментами, который используется довольно простым способом и сохраняет данные, если я поворачиваю экран, и мне не нужно управлять им самому, но проблема в том, что он загружает два фрагмента одновременно, начало действия (по крайней мере, я так думаю), а также позволяет изменять фрагменты, проводя пальцем вперед и назад.
Фрагмент как действие содержит свой собственный жизненный цикл и представляет собой поведение или часть пользовательского интерфейса в действии , самое главное, что его можно добавить или удалить из содержащего его действия, он всегда привязан к действию . что требуется для работы.
FragmentActivity — это Activity , которое содержит поддержку Fragments, что дает нам возможность выполнять транзакции Fragment внутри него, то есть добавлять или удалять.
Основное различие между FragmentActivity и Fragment заключается в том, что Fragment — это компонент, который отображает поведение или часть пользовательского интерфейса в Activity , но ему нужна Activity , в которой он будет отображать себя; и FragmentActivity — это действие, как мы его знаем, но оно содержит поддержку фрагментов, поэтому мы можем добавить к нему фрагмент.
В этом будет разница между жизненным циклом a
Activity
и aFragment
:На сайте SO на английском языке есть ответ @MrK , который относится к вашему вопросу: «Разница между Fragment и FragmentActivity» .
Фрагмент — это часть действия, которая имеет:
Фрагменты не являются частью API до HoneyComb (Android 3.0). Если вы хотите использовать фрагменты в приложении, ориентированном на более раннюю версию платформы, чем HoneyComb, вы должны добавить пакет поддержки в свой проект и использовать FragmentActivity для хранения ваших фрагментов.
У класса
FragmentActivity
есть API для работы с фрагментами, тогда как у класса Activity до Android 3.0 его не было.https://stackoverflow.com/a/10609839/250260
Видимо есть разница на уровне концепций но не функционала.
FragmentActivity
работает в предыдущих версиях в Android, когда вы используетеandroid.app.Fragment
и чтобы не генерировались исключения совместимости, он используетсяFragmentActivity
, а если вы используете, онandroid.support.v4.app.Fragment
соответствует занятиюFragment
, оба идентичны, у них одинаковые функции, хотя они немного меняются в названии, вFragmentActivity
функцииgetLoaderManager()
иgetFragmentManager()
они меняются наgetSupportLoaderManager()
иgetSupportFragmentManager()
соответственно. Но оба по-прежнему являются однимsubclase
изActivity
Я нашел аналогичный вопрос на форуме StackOverflow на английском языке , на который ответил @MrK , который, я думаю, очень хорошо объяснен и получил довольно много положительных голосов, поэтому я решил перевести его, поскольку он соответствует тому, что вы спрашиваете.
Перевод:
А
Fragment
— это часть аActivity
, которая имеет:Activity
.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
Если вы используете a
Fragment
вFragmentActivity
(до HoneyComb), вызовите:getSupportFragmentManager()
получитьandroid.support.v4.app.FragmentManager
.getSupportLoaderManager()
получитьandroid.support.v4.app.LoaderManager
Так что не делай
либо
Также полезно знать, что хотя фрагмент должен быть встроен в
Activity
макет, он не обязательно должен быть его частьюActivity
. Его можно использовать как невидимого работника для активности без собственного пользовательского интерфейса.А
FragmentActivity
тотActivity
, который может нестиFragments
.Однако
Fragment
бизнес в одиночку всегда должен полагаться на бизнесActivity
. Можно сказать, что это как часть файлаActivity
.