Вложение вкладок в Android 4 с библиотекой поддержки (ActionBarSherlock)

У меня серьезные проблемы с работой трех слоев вложенных вкладок в приложении, которое работает с Android 2.1 и выглядит как Android 4 (использует фрагменты библиотеки поддержки).

Цель

  • Приложение должно иметь ActionBar (работает, в настоящее время использует ActionBarSherlock)
  • 3 фиксированные вкладки на главном экране, которые не перемещаются в панель действий, даже если экран достаточно большой. Вторая из этих вкладок содержит...
  • Около 4 вкладок, которые были загружены с сервера при первом входе пользователя в систему. Каждый из них содержит
  • Около 10 переключаемых вкладок (как в Play Store), которые загружались с сервера при первом входе пользователя в систему. Моя идея здесь состоит в том, чтобы использовать ViewPagerIndicator, поскольку эта библиотека написана тем же парнем, что и ActionBarSherlock, что должно свести проблемы к минимуму. Но я открыт для идей здесь). Каждая из этих перелистываемых вкладок содержит что-то, что в настоящее время является фрагментом, но может быть изменено.

Эта проблема

Когда это было приложение для Android 2, оно просто использовало вложенные TabActivities, но они не работают со всем, что есть в Android 4. Я не понимаю, как это сделать, наверное, особенно ограничение «вы не можете вкладывать фрагменты» вызывает у меня головную боль. Кроме того, кажется, что вы можете использовать только один FragmentManager для каждого действия, поэтому моя идея иметь его на каждой из вкладок второй строки не сработала (все, кроме первой вкладки, остались пустыми). Как это сделать правильно?

(Пожалуйста, поймите, что «Использовать другой дизайн графического интерфейса» не вариант, поскольку это то, о чем просил клиент, и он не будет пересматривать)


person Michael Zinn    schedule 06.08.2012    source источник
comment
Почему бы не использовать tabactivities для главного экрана и viewpagerindicator для пролистываемых вкладок внутри каждой из вкладок.   -  person Gautham    schedule 07.08.2012
comment
Потому что вкладки панели действий принимают только фрагменты. Использование TabActivities там не работает.   -  person Michael Zinn    schedule 07.08.2012
comment
@MichaelZinn Упоминается ли это где-то в руководстве для разработчиков Android: «особенно ограничение на вложение фрагментов» ... Я только что опубликовал аналогичный вопрос: stackoverflow.com/questions/15608935/, потому что я ищу нечто подобное.   -  person Mathias Conradt    schedule 25.03.2013


Ответы (1)


PagerAdapter не требует Fragments в качестве детей. Вы можете надувать/управлять своими собственными представлениями там. Таким образом, вы можете продолжать использовать вложенные TabActivities. Или вы можете поместить Fragments на верхний уровень и управлять своими собственными Views на нижнем уровне ViewPager.

Теоретически вы также можете использовать ViewFlipper, если хотите сохранить фрагменты в папке ViewPager. Вам придется написать свои собственные LinearLayout с Buttons в качестве вкладок, но это несложно. Если вы ищете голографический вид, просто установите стиль на те, что есть в ABS.

Другой вариант — использовать TabHost без использования TabActivity. Вы даже можете использовать его с фрагментами. См. пример здесь.

Также обратите внимание: если вам нужен стиль ViewPagerIndicator в стиле Google Play, он теперь включен в пакет поддержки: PagerTitleStrip.

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

Тем не менее,

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

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

Направьте их на официальный веб-сайт дизайна и покажите примеры популярных шаблонов навигации, таких как те, которые можно найти в Gmail, YouTube, Google+, Evernote и т. д. Недавно я имел дело с клиентом, который запросил точно такой же шаблон, который вы описываете, и после нескольких недель нажима смог убедить их, что более двух слоев вкладок неприемлемо.

Вы также можете показать им мою страницу Wall of Shame в Google+, на которой отмечены плохие шаблоны дизайна, используемые в популярных приложениях для Android: Анти-шаблоны пользовательского интерфейса Android. :-)

person Paul Burke    schedule 23.09.2012
comment
Спасибо, это поле для комментариев слишком маленькое, чтобы написать, что именно я сделал, но в основном мне удалось убедить клиента изменить графический интерфейс. :) - person Michael Zinn; 03.09.2013