Шаблоны, когда использовать переход активности против динамических фрагментов

Существуют ли какие-либо шаблоны обработки переходов пользовательского интерфейса в Android Activity vs Fragments? В настоящее время я изучаю пользовательский интерфейс, который имеет не более 3 столбцов в ландшафте. Я хотел бы, чтобы пользовательский интерфейс начинался с 1 столбца по всему экрану, а затем при выборе чего-либо перемещался во втором столбце, а затем при нажатии на что-то во втором исчезал в третьем на планшетах и ​​телефонах и исчезал в 1-м столбце. на телефонах. Мне интересно, когда я должен сделать это как переход действия, а когда я должен просто использовать фрагменты с представлениями, которые появляются. Насколько я читал, фрагменты можно перемещать в другие действия, поэтому я выбираю либо реализацию действий со статическими макетами столбцов, которые затем переходят с фрагментами, либо имеют одно действие со всеми тремя столбцами, а действие управляет появлением Фрагменты. Оба подхода могут работать, но меня интересовали плюсы и минусы обоих решений с разных точек зрения.

Есть два вопроса, похожие на то, что я задаю, но не совсем отвечаю на мой


person AGrunewald    schedule 10.10.2011    source источник


Ответы (3)


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

У нас есть пример кода под названием "Honeycomb Gallery", который вы можете посмотреть здесь. макет с двумя столбцами и панелью действий, а также возможность показать / скрыть крайний левый столбец. Это должно дать вам хороший старт в выяснении того, как сделать макет для нескольких фрагментов и показать/скрыть их.

К вашему сведению, один важный компромисс использования нескольких фрагментов в действии вместо нескольких действий заключается в том, что фрагменты не реагируют напрямую на намерения. Например, если у вас есть приложение для создания заметок, где страница «Просмотр заметки» была действием. , и вы изменили его так, чтобы внутри основного действия был фрагмент «просмотр заметки», тогда вам нужно было бы настроить его так, чтобы основное действие получало идентификатор заметки И действие заметки (создание, просмотр, редактирование, что угодно ) в намерении, в отличие от того, чтобы просто действие «просмотр заметки» получало идентификатор заметки в намерении. Затем основное действие должно будет соответствующим образом настроить фрагменты на странице. Ничего страшного, но если внешний доступ к различным частям вашего приложения через Intent важен, то может быть проще разбить ваше приложение на несколько действий, а также использовать фрагменты для представления отдельных компонентов.

person Alexander Lucas    schedule 20.10.2011
comment
Спасибо, Александр, это хороший указатель, я действительно забыл об этом примере приложения. Для меня это не столько о действиях, сколько о том, когда использовать одно действие, содержащее статические фрагменты, и когда динамически загружать фрагменты. Я думаю, что одним из хороших шаблонов является механизм Intent. Так что, если вы хотите, чтобы экран был адресован через Intent, тогда используйте его в своей собственной Activity. Можете ли вы придумать другие шаблоны? Будут ли приложения Ice Cream Sandwich Core иметь хорошие шаблоны, которые можно использовать для изучения того, как лучше всего использовать фрагменты? - person AGrunewald; 21.10.2011
comment
На недавнем мероприятии Honeycomb Android Dev Lab один из разработчиков сказал, что они исходят из того, что делает Gmail. В то время как то, что работает в вашем приложении, всегда является наиболее важным, они поднимают хороший вопрос в том, что приложение gmail (как для планшета, так и для телефона) является очень надежным эталоном с точки зрения правильного использования фрагментов и обновления как элементов панели действий, так и видимых фрагментов. в зависимости от контекста (то есть элементы панели действий меняются в зависимости от того, читаете ли вы электронное письмо, пишете его или просматриваете список электронных писем). Для ICS я пока не могу говорить о деталях :) - person Alexander Lucas; 22.10.2011
comment
Спасибо за отличное обновление Александр. Я с нетерпением жду ICS Open Source Drop, чтобы взглянуть на код. Я знаю, что многие из Google Apps не включены, но я считаю, что в дереве с открытым исходным кодом все еще достаточно основных приложений, чтобы многому научиться. - person AGrunewald; 26.10.2011

На основе страницы API фрагментов Android 3.0 , действие является автономным, в то время как фрагмент может рассматриваться как мини-действие, которое должно размещаться внутри фактического действия.

Далее говорится, что введение Fragment API дало разработчикам Android возможность решить многие болевые точки, с которыми разработчики столкнулись при работе с Activity, поэтому в Android 3.0 полезность Fragment выходит далеко за рамки простой настройки для разных экранов:

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

Однако было замечено, что введение фрагментов решает проблемы реального мира. Основываясь только на этом, я бы порекомендовал вам написать код «Proof of Concept» и оценить результаты. В настоящее время это может быть единственным реальным испытанием, которое будет иметь значение.

person Noah    schedule 20.10.2011
comment
Спасибо за комментарий, Ной, я согласен с тем, что вы говорите, к сожалению, это не отвечает на мой вопрос, так как я искал закономерности. Но, похоже, мы все еще открываем новые горизонты с помощью Fragments. - person AGrunewald; 21.10.2011

Используйте действия для полноэкранного режима

Использовать фрагменты для части экрана или без него (но не для службы)

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

Основное приложение, в котором все это размещается, — это приложение, а вкладки — это просто представление, которое вызывает диспетчер фрагментов.

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

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

Итак, у меня Activity -> фрагменты домов -> запускать полноэкранные Activity для специальных команд.

person HaMMeReD    schedule 20.10.2011
comment
Спасибо за ответ HaMMeReD Я уже это знал :-) Вопрос был больше направлен на то, когда переходить между действиями для смены экрана, а когда просто менять динамические фрагменты. - person AGrunewald; 21.10.2011
comment
Используйте Activity каждый раз, когда это полноэкранный компонент. Вы можете повторно использовать фрагменты в нескольких действиях. - person HaMMeReD; 21.10.2011
comment
На самом деле то, что делает полноэкранный компонент на телефоне, является частью экрана на планшете, поэтому все же имеет смысл размещать полноэкранные биты во фрагментах вместо действий. - person Alexander Lucas; 22.10.2011
comment
Я хотел бы указать, что фрагменты внутри фрагментов не поддерживаются API, и они вызовут сбои. Поэтому я все же не рекомендую использовать фрагменты для полноэкранных приложений, если вы собираетесь использовать фрагменты внутри них. - person HaMMeReD; 24.10.2011
comment
На самом деле каждое действие должно быть заполнено фрагментами. У вас никогда не должно быть активности с элементами управления пользовательского интерфейса, только активность с фрагментами. Если это полноэкранное действие, оно должно содержать один фрагмент. - person mjsalinger; 20.11.2012