Фрагмент або фрагмент підтримки?


125

Я розробляю додаток, який підтримує Android> = 4.0. Тут використовуються фрагменти з android.appупаковки. Оскільки я зіткнувся з проблемами зі старшою реалізацією фрагмента в 4.0, як цей , які вже зафіксовані в бібліотеці підтримки, я розглядаю можливість перейти до реалізації фрагмента з бібліотеки підтримки, щоб отримати більш надійну та послідовну реалізацію.

Яка ваша думка з цього приводу? Ви використовуєте фрагменти з бібліотеки підтримки, хоча вони вже доступні під час розробки для Android 4?


2
Це приємне запитання (+1, тому що мене викликає цікавість). Також в Інтернеті це не є хорошим поясненням. Я використовую бібліотеку підтримки для свого додатка, і мені цікаво, помиляюсь я чи ні, тому що я не помічав жодної помилки під час компіляції або під час тесту.
JJ86

2
@animuson Відповідь brillenheini доводить, що це не в першу чергу відповідь, заснована на думці.
OneWorld

Відповіді:


90

З мого досвіду, використання однакового фрагмента на всіх пристроях Android є великою перевагою. Я не міг позбутися всіх NullPointerExceptions, коли стан зберігається на Android 4.0 за допомогою власних фрагментів, з бібліотекою підтримки їх усіх немає. Крім того, я не бачив жодного недоліку при такому підході.

Тож моя відповідь на моє власне запитання зараз: Під час розробки для Android 4.x хороша ідея використання фрагментів з бібліотеки підтримки. У бібліотеці підтримки виправлені помилки, які все ще присутні у більш старих версіях фрагментів і часто оновлюються більше виправлень помилок.


11
То яка ж тоді мета android.app.Fragment? Якщо ви можете додати це до своєї відповіді тут, дещо більше пояснень, я був би повністю задоволений. Дякую!
jonstaff

1
@jonstaff Причина, ймовірно, історична. Перегляньте там мою оновлену відповідь.
brillenheini

11
Для повноти, здається, є такі речі, які фрагменти, які підтримують, не можуть зробити (наприклад , анімувати нимиobjectAnimator , навіть якщо фактична цільова ОС підтримує це). Що, у випадку, якщо ви використовуєте ViewPager, означає, що вам доведеться використовувати адаптери з бібліотеки підтримки v13, інакше у вас не може бути аніметатора перегляду, а також гортання.
GSerg

5
Також будьте обережні, з серпня 2014 року бібліотека v13 не може робити вкладені фрагменти.
Мартін Марконніні

1
Чому хлопці в Google вирішили використовувати бібліотеку v13 для iosched app github.com/google/iosched/blob/master/android/src/main/java/com/… , у них повинні бути певні причини
forcewill

40

Однією з основних причин дотримуватися SupportFragmentдеякого часу є те, що ви не маєте доступу ChildFragmentManagerдо API 17. Бібліотека підтримки надасть вам підтримку версії дочірнього менеджера фрагментів.

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


21

Мені також стало неприємно включати бібліотеки підтримки, незважаючи на націлювання на Android 4.0+ - але, мабуть, офіційно рекомендується:

Пакет «Бібліотека підтримки Android» містить кілька бібліотек, які можна включити у вашу програму. Кожна з цих бібліотек підтримує певний діапазон версій платформи Android та набір функцій.

У цьому посібнику пояснюються важливі функції та підтримка версій, що надаються бібліотеками підтримки, щоб допомогти вам вирішити, яку з них слід включити у вашу заявку. Загалом, ми рекомендуємо включити підтримку v4 та бібліотеки додатків v7, оскільки вони підтримують широкий спектр версій Android та надають API для рекомендованих моделей інтерфейсу користувача.

http://developer.android.com/tools/support-library/features.html


Це має бути прийнятою відповіддю, незважаючи на те, що @brillenheini дав відповідь сам. Він відповідає на питання найкращою точністю та стислістю.
Арвінд Мані

4

IMHO, якщо ви плануєте розробляти лише для версії 4.0, я б рекомендував працювати з рідними бібліотеками, оскільки виконуваний файл стане меншим. Це правда, що ви можете зіткнутися з проблемами помилок у ранніх версіях, але я думаю, що більшість із них повинні бути досить тривіальними, щоб обійти їх. Також бібліотека сумісності повинна відображати нарізні фрагменти, якщо ви все одно працюєте на версії 4.0 та вище. Тож вам все одно доведеться боротися з подібними проблемами. Проблема з бібліотеками підтримки полягає в тому, що у вас багато класів з'являються 2 рази (один раз у структурі пакета підтримки та один раз у "рідній" структурі пакета), що робить розробку трохи більш громіздкою.

Однак якщо ви також хочете випустити свою програму до 4.0, то навколо бібліотеки підтримки немає ніякого способу. Крім того, оскільки на 2.3 є близько 38% усіх користувачів, можливо, бізнес-сенс буде включати цю версію ОС. У такому випадку ви можете використовувати бібліотеку підтримки в поєднанні з Джейком Уортонсом ActionBarSherlock (або з підтримкою Google для бібліотеки ActionBar після її остаточного випуску).


3
Дякую за вашу відповідь. Оскільки мені потрібен ViewPager, я все одно повинен включати бібліотеку підтримки. Також фрагмент підтримки не намагається переключитися на нативну реалізацію, якщо вона є. Ось що кажуть документи .
brillenheini

Так, річ (як @brillenheini сказав), що для того, щоб мати ViewPager, вам потрібна v4, тому навіть якщо ви орієнтуєтесь лише на пристрої v13 +, ви, швидше за все, закінчите мати v4.
Сотті

Я щойно виявив, що теж (ViewPager потребує v4) на моєму API 21 та в додатку. Мех: - /
mraviator

2

Здається, що краще використовувати Бібліотеку підтримки зараз, оскільки я побачив тут заяву https://developer.android.com/reference/android/app/Fragment.html

Цей клас застарілий на рівні API. Використовуйте фрагмент бібліотеки підтримки для послідовної поведінки на всіх пристроях та доступу до життєвого циклу.

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