Чим відрізняється Fragment від FragmentActivity?


160

Моє питання, крім очевидних спадкових відмінностей, які основні відмінності між Fragmentі FragmentActivity? До яких сценаріїв найкраще підходить кожен клас? Я намагаюся зрозуміти, чому обидва ці класи існують ...

Відповіді:


280

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макета. Його можна використовувати як невидимого працівника для діяльності, не маючи власного інтерфейсу.


6
Однак фрагмент не обов'язково є частиною макета діяльності; ви також можете використовувати фрагмент без власного інтерфейсу користувача як невидимий працівник для діяльності.
uzay95

1
@ uzay95 дякую, що вказали на це. Я додав розділ наприкінці, щоб згадати його.
Гуннар Карлссон

@GunnarKarlsson Чи додамо фрагмент до fragmentActivity?
Dhasneem

2
@Dhasneem Ви додаєте фрагмент до FragmentActivity, якщо хочете, щоб ваша програма працювала на версіях Android нижче 3,0. Інакше ви додаєте фрагмент до дії.
Гуннар Карлссон

2
Дякую! Це вирішує мою проблему! Тепер я знаю, чому мій додаток (написаний з Activity) завжди виходить з ладу на onCreate після додавання кнопки входу у Facebook (вони використовують у своєму прикладі android.support.v4.app.Fragment). Звичайно, є й інші причини аварії. Але ваша відповідь - це заключний твір, щоб скласти їх разом.
Chlind

14

FragmentActivity - це наша класична діяльність з підтримкою фрагментів, не більше того. Тому FragmentActivity потрібен, коли фрагмент буде приєднаний до діяльності.

Фрагмент свердловини - це хороший компонент, який копіює основні способи поведінки, але не є окремим компонентом додатка, як "Активність", і його потрібно приєднати до діяльності, щоб працювати.

Подивіться тут для більш детальної інформації


1
BTW, застаріла відповідь, яка стосується лише програм, які бажають працювати на пристроях, старших за API 11.
ToolmakerSteve

@ToolmakerSteve можете надати більше деталей? Якщо можливо, чи можете ви редагувати відповідь оновленою версією?
Gökhan Barış Aker

8

Подумайте про FragmentActivity як звичайний клас діяльності, який може підтримувати фрагменти. До медосховища клас активності не міг безпосередньо подати фрагменти, тому це потрібно в заходах, які використовують фрагменти.

Якщо ваш цільовий дистрибутив - стільники стільників і більше, ви можете замість цього активізувати активність.

Також фрагмент слід розглядати як "суб-діяльність". Вона не може існувати без діяльності. Завжди думайте про фрагмент як про суб-діяльність, і ви повинні бути хорошими. Таким чином, діяльність була б батьком, а фрагмент (и) - дитиною - символічними відносинами.


1

a FragmentActivity - це спеціальна діяльність, яка містить Fragment. У цих кількох словах я пояснив вам одне з головних важливих змін, яке разом із android 3.0 (HoneyComb), андроїд команда вставила в sdk для android.

Завдяки цим новим видам концепції ваш код та макет стають більш гнучкими та доступними. Якщо ви шукаєте в Google, є багато прикладів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.