Как фрагменты влияют на единственную, сфокусированную вещь, которую пользователь может сделать в принципе?

Как говорится в документации Android: «Активность — это отдельная, сфокусированная вещь, которую может делать пользователь».

Однако с помощью фрагментов мы сможем делать многие «вещи» в рамках той же активности, что и Рето Мейер предлагает. Его предложение состоит в том, чтобы заменить фрагмент выбора фрагментом содержимого в той же деятельности (раздел «В нашем коде это создает дилемму»).

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

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

Должен ли я иметь одно действие для управления всеми фрагментами приложения и транзакциями фрагментов? Как Retro Meier предлагает выше. Это рекомендуемый путь? Таким образом, нарушается принцип «одной, сфокусированной вещи, которую может сделать пользователь» для действий?

Или я что-то упускаю? Надеюсь ;)

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


Дианна Хакборн уже ответила (спасибо за ссылка мгв):

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

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

Итак, чтобы перенести на фрагменты, я должен переместить каждую логику экрана во фрагменты и использовать действия в качестве контейнеров для каждой операции. Таким образом, оставив Activity управлять навигацией между фрагментами для каждой операции, верно? Похоже, будет сложно адаптировать длинные приложения. :(

Кстати, определение текущего действия должно немного измениться. :)


person Axel M. Garcia    schedule 19.04.2011    source источник
comment
Возможный дубликат stackoverflow .com/questions/5328606/   -  person mgv    schedule 19.04.2011


Ответы (1)


Должен ли я иметь одно действие для управления всеми фрагментами приложения и транзакциями фрагментов?

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

Таким образом, нарушается принцип «одной, сфокусированной вещи, которую может сделать пользователь» для действий?

Эта часть документации была написана в 2008 году, возможно, раньше. Если бы в то время существовали фрагменты, я полагаю, в документации было бы указано, что фрагмент — это «отдельная целенаправленная вещь, которую может делать пользователь», с действиями, выступающими в качестве уровня оркестровки, определяющего, какие фрагменты видны при каких обстоятельствах.

Документация не во всех местах будет обновляться для отражения фрагментов, а если и будет, то это займет какое-то время. Для баланса 2011 года вам, как минимум, потребуется выполнить собственные переводы инструкций эпохи 2008 года, чтобы преобразовать их в пользовательские интерфейсы на основе фрагментов эпохи 2011 года.

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

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

Или я что-то упускаю?

Честно говоря, вам не хватает конкретики в вашем вопросе, чтобы на него можно было ответить.

person CommonsWare    schedule 19.04.2011
comment
вам не хватает конкретности в вашем вопросе, чтобы сделать его разумным для ответа :) Вы прекрасно ответили на весь вопрос: я полагаю, что в документации будет указано, что ФРАГМЕНТ - это единая, сфокусированная вещь, которую может делать пользователь, с действиями, служащими СЛОЙ ОРКЕСТРАЦИИ, определяющий, какие фрагменты видны при каких обстоятельствах. Я понимаю, что вы говорите о документации, но я думаю, что для такой компании, как Google, в этом аспекте можно ожидать немного большего... принимая во внимание, что мы говорим о ключевом элементе как Активность. Спасибо! - person Axel M. Garcia; 19.04.2011