Intereting Posts
Нет опции «Docked Mode» в настройках «Предварительный просмотр» в Android Studio после открепления Вала для Android? Устройства Samsung не закрывают ящик приложения после трансляции CLOSE_SYSTEM_DIALOGS Обработка ошибок сертификата в Android Webview и очистка сертификатов Как я могу указать нуль как атрибут XML для Android? Android SDK Windows Не удалось выполнить Android.bat Проверьте, присутствует ли SDCard, логическое значение всегда верно Приложение Android Подключение к серверу Node.js с помощью Socket.io Android – Анимируйте верхний вид ViewMargin / bottomMargin / etc в LinearLayout или RelativeLayout В каких обстоятельствах Android Log.wtf прекратит мое приложение? Java.lang.IllegalArgumentException: может использовать только младшие 16 бит для requestCode Android AudioRecord против MediaRecorder для записи аудио Ошибка при открытии файла кэша шейдера libEGL Ошибка экспорта подписанного приложения Android Export Отставание от задержки инициализации двигателя TTS Engine в Android

В чем преимущество использования фрагментов в Android, а не Views?

При разработке для Android вы можете установить целевой (или минимальный) sdk на 4 (API 1.6) и добавить пакет совместимости android (v4), чтобы добавить поддержку для Fragments . Вчера я сделал это и успешно реализовал Fragments для визуализации данных из пользовательского класса.

Мой вопрос заключается в следующем: какова польза от использования Fragments а не просто для получения представления из пользовательского объекта и поддержки API 1.5?

Например, скажем, у меня есть класс Foo.java:

 public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @param title * @param message */ public Foo(String title, String message) { this.title = title; this.message = message; }//Foo /** Retrieves the View to display (supports API 1.5. To use, * remove 'extends Fragment' from the class statement, along with * the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}) * @param context Used for retrieving the inflater */ public View getView(Context context) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//getView @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//onCreateView }//Foo 

Оба метода очень просты в создании и работе с Activity, которые, например, отображают List<Foo> (например, программно добавляя их в ScrollView ), так что Fragments действительно все, что полезно, или они просто Чрезмерно прославленное упрощение получения вида, например, через код выше?

Solutions Collecting From Web of "В чем преимущество использования фрагментов в Android, а не Views?"

Основная причина использования фрагментов – для функций backstack и lifecycle. В противном случае пользовательские представления более легки и проще реализовать.

Сначала я попытался создать приложение для телефона / планшета, используя пользовательские представления. Все, казалось, работало на телефонах и планшетах, даже переключение с одной панели на панель разделения. Там, где я столкнулся с проблемой, была обратная кнопка и жизненный цикл. Поскольку я просто обновлял представления вручную … не было ничего отслеживания истории взглядов и их состояний. Таким образом, кнопка «Назад» работала не так, как ожидалось, и было сложно воссоздать даже последнее состояние во время жизненного цикла событий, например, при повороте приложения. Чтобы исправить это, мне пришлось обернуть мои пользовательские представления в фрагменты и использовать FragmentManager, чтобы предыдущие состояния были сохранены и воссозданы.

Я понял, ответив на то, что я отправил аналогичный вопрос годом ранее: https://stackoverflow.com/a/11126397/618881

Я бы сказал, что фрагменты полезны в двух сценариях: если вы разделяете представления на некоторых устройствах / ориентациях и показываете их в двух действиях и показываете все содержимое в одном на других устройствах. Это было бы целесообразным, если вы поедете на планшет или, может быть, даже в альбомном режиме на телефоне: например, вы показываете список предметов и детали на одном экране. На телефоне или в портретном режиме вы просто показываете одну часть.

Другой вариант использования – многоразовые. Поэтому, если у вас есть некоторые виды, которые видны в разных действиях, а также выполняют некоторые действия, вы можете поместить это поведение в фрагмент и затем повторно использовать его. Очевидно, вы, вероятно, могли бы это сделать и с пользовательскими виджетами.

Я бы не видел никаких причин для использования фрагментов для каждого представления, и я думаю, что это будет просто накладные расходы. Я использую их только в первом случае, и я бы сказал, что это упрощение.

Android представил фрагменты в Android 3.0 (уровень API 11), в первую очередь для поддержки более динамичных и гибких пользовательских интерфейсов на больших экранах, таких как планшеты. Поскольку экран планшета намного больше экрана планшета, есть больше возможностей для объединения и обмена компонентами пользовательского интерфейса. Фрагменты позволяют создавать такие проекты без необходимости управлять сложными изменениями в иерархии представлений. Разделив макет действия на фрагменты, вы сможете изменить внешний вид активности во время выполнения и сохранить эти изменения в стеке, которое управляется этой деятельностью.

Здесь вы можете прочитать больше.

  1. Сценарий Activity Split screen – У нас есть One Layout и одно действие, которое обрабатывает левую часть экрана
  2. Сценарий FragmentActivity у нас есть Один макет для главного экрана, один для левой для правой

Сценарий один хорош, если у вас есть простое приложение.

Сценарий два хорош, если вы хотите иметь несколько фрагментов и несколько FragmentActivities, и вы можете комбинировать каждый из них. Также вы можете взаимодействовать между фрагментами.

У меня есть разделение экрана Fragmentactivity, я могу называть его «Intent Extras» и рассказывать фрагменту, который должен быть загружен. Фрагменты хороши, потому что они не проявляются, поэтому вы можете сделать многоразовые фрагменты и FragmentActvity.

Но это делает ваш проект более крупным. Но если вы делаете большой проект, вы можете сэкономить много. Потому что вы можете использовать одни и те же фрагменты или одну и ту же функцию фрагментации.

И я думаю, что эти фрагменты приходят немного поздно, поэтому вы должны попытаться мыслить по-новому. Возможно, просто попробуйте преобразовать свою активность в FragmentActivity. Позже попытайтесь найти код многократного использования и сделать из него фрагмент.

Это полезно, но я не знаю, как сейчас. Но у меня есть некоторые идеи.

Это всегда проблема. Команда Android сделала что-то неопределенное, и никто не знает, что хорошо. Потому что мы вряд ли узнаем, как это было, и здесь возникают новые вещи.

По-моему, это хорошо, но не потому, что Google говорит нам.

Добавьте один случай при использовании Fragment или Activity over CustomView:

Когда вы используете CursorLoader для наблюдения за определенными видами, ListView или TextView и хотите обновлять их отображаемое значение всякий раз, когда данные вашего ContentProvider обновляются на задней панели (в большинстве случаев у вас есть служба, которая обновляет вашу локальную базу данных путем периодического опроса данных из удаленной базы данных / облака )

Одна большая вещь во всех приведенных выше замечаниях не упоминается, что фрагмент остается в памяти, даже если Android убивает активность и перезапускает ее, когда вы делаете что-то вроде изменения ориентации вашего устройства. Это делается по соображениям производительности, но также может привести к неожиданным результатам, если вы ожидаете, что фрагменты будут уничтожены только для того, чтобы найти, что они воссоздаются из ниоткуда.