Я пытаюсь понять, как использовать Фрагменты для создания приложений, которые хорошо адаптируются к нескольким экранам и макетам. Я изучил несколько примеров:
- Документ Fragments в руководстве разработчика для Android.
- приложение Google IO
- Образец фрагментов из ActionBar Sherlock.
Все они поддерживают множественный подход Activity
:
- На большом экране отобразите один
Activity
с несколькимиFragment
s - На меньшем экране разделите
Fragment
на несколькоActivity
s.
Я думал о другом подходе - одном Activity
:
- У вас есть один
Activity
со всемиFragment
в нем. - В зависимости от размера и ориентации экрана покажите/скройте соответствующие
Fragment
(s) (используяFragmentTransaction.show()
/FragmentTransaction.hide()
).
Чтобы проиллюстрировать тот же "список статей/статей статьи", который используется в руководстве для разработчиков Android:
- Имейте
News
активность, содержащую какArticleListFragment
, так иArticleReaderFragment
. - На вкладке всегда отображаются оба фрагмента.
- На телефоне
ArticleReaderFragment
изначально скрыт. Когда статья выбрана из списка,ArticleListFragment
скрыт и отображаетсяArticleReaderFragment
.
Кто-нибудь использовал подобный подход? Существуют ли какие-либо практические недостатки, которые может иметь этот метод? Кажется ли это лучше/хуже по сравнению с многопользовательским способом? Например, фрагменты нельзя отображать/скрывать в XML - один должен использовать FragmentTransaction
для этого.
EDIT 1: Описание гипотетического сценария
Представьте приложение, которое может отображать до трех "панелей" за раз на экране. Кроме того, это факторы, которые следует учитывать:
- Телефон может отображать только одну панель за раз (независимо от ориентации на портрете/альбомной ориентации).
- 7-дюймовый планшет может отображать 2 панели, разбивать по вертикали в "Портрет" и разбивать по горизонтали в ландшафтном режиме.
- Планшет на 10+ дюймов может отображать 2 панели, разделенных вертикально в Portrait; 3 панели разбиты горизонтально в ландшафте.
Для простоты, держите экраны телевизора вне обсуждения.
Теперь, переведя это в дизайн:
- У нас есть три фрагмента: Frag1, Frag2 и Frag3.
- В простейшем случае все три фрагмента находятся в одной активности (позволяет называть ее ActivityA). Это 10-дюймовый ландшафтный корпус.
- Другой "простой" случай - когда каждый фрагмент находится в своей собственной деятельности - ActivityA содержит Frag1; ActivityB содержит Frag2, а ActivityC содержит Frag3.
До сих пор мы не рассматривали ничего, что существенно отличается от примера News Reader, представленного в руководстве разработчика Android. Единственное существенное отличие состоит в том, что у него есть три фрагмента вместо двух.
Теперь, в случае 7-дюймовых вкладок, которые могут вместить только 2 фрагмента. Как это будет работать? Обратите внимание, что возможны две комбинации:
- Отображаются Frag1 и Frag2.
- отображаются Frag2 и Frag3.
Я просто не могу обернуть голову вокруг этого. Я делаю все это в ActivityA? Я просто создаю совершенно новый ActivityD? Сколько макетов мне нужно создать (я подсчитал около 8)? Разве это не слишком много перестановок?
Я понимаю, что предложенный выше подход с одной активностью также не может быть подходящим для этого сценария - поскольку отображение/скрытие фрагментов само по себе является нетривиальным.
Любые предложения о том, как справиться с этим, не перегруженные макетами и комбинациями?