Моє питання, крім очевидних спадкових відмінностей, які основні відмінності між Fragment
і FragmentActivity
? До яких сценаріїв найкраще підходить кожен клас? Я намагаюся зрозуміти, чому обидва ці класи існують ...
Моє питання, крім очевидних спадкових відмінностей, які основні відмінності між Fragment
і FragmentActivity
? До яких сценаріїв найкраще підходить кожен клас? Я намагаюся зрозуміти, чому обидва ці класи існують ...
Відповіді:
A 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
якщо ви використовуєте 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 потрібен, коли фрагмент буде приєднаний до діяльності.
Фрагмент свердловини - це хороший компонент, який копіює основні способи поведінки, але не є окремим компонентом додатка, як "Активність", і його потрібно приєднати до діяльності, щоб працювати.
Подивіться тут для більш детальної інформації
Подумайте про FragmentActivity як звичайний клас діяльності, який може підтримувати фрагменти. До медосховища клас активності не міг безпосередньо подати фрагменти, тому це потрібно в заходах, які використовують фрагменти.
Якщо ваш цільовий дистрибутив - стільники стільників і більше, ви можете замість цього активізувати активність.
Також фрагмент слід розглядати як "суб-діяльність". Вона не може існувати без діяльності. Завжди думайте про фрагмент як про суб-діяльність, і ви повинні бути хорошими. Таким чином, діяльність була б батьком, а фрагмент (и) - дитиною - символічними відносинами.
a FragmentActivity - це спеціальна діяльність, яка містить Fragment. У цих кількох словах я пояснив вам одне з головних важливих змін, яке разом із android 3.0 (HoneyComb), андроїд команда вставила в sdk для android.
Завдяки цим новим видам концепції ваш код та макет стають більш гнучкими та доступними. Якщо ви шукаєте в Google, є багато прикладів.