Пользовательский интерфейс с двумя фрагментами и отдельными действиями - PullRequest
7 голосов
/ 16 марта 2011

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

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

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

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

Каковы лучшие практики здесь?

1 Ответ

6 голосов
/ 16 марта 2011

В этом блоге обобщены причины выбора фрагментов вместо действий:

Встроенные действия через ActivityGroup была хорошая идея, но всегда была трудно иметь дело с тех пор разработан, чтобы быть независимым автономный компонент вместо тесно взаимодействуя с другими деятельность. Fragment API - это очень лучшее решение для этого, и следует рассматриваться как замена встроенные действия.

Сохранение данных в Деятельности случаи могут быть достигнуты через Activity.onRetainNonConfigurationInstance (), но это довольно клунки и не очевидно. Фрагмент заменяет это механизм, позволяющий вам сохранить весь экземпляр фрагмента просто установка флага.

Специализация фрагмента называется DialogFragment позволяет легко показать Диалог, который управляется как часть Жизненный цикл деятельности. Это заменяет API-интерфейсы «управляемого диалога».

Еще одна специализация фрагмента называется ListFragment позволяет легко показать список данных. Это похоже к существующей ListActivity (с еще несколько функций), но следует уменьшить общий вопрос о том, как показать a> список с некоторыми другими данными.

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

Фреймворк имеет встроенную поддержку управление бэк-стеком фрагмента объекты, облегчающие предоставление поведение кнопки «Назад» во время активности которая объединяет существующую деятельность задний стек. Это состояние также сохраняется и восстанавливается для вас автоматически.

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


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

...