2013-11-02 4 views
0

У меня есть приложение, которое использует ActionBar вкладки для навигации. С этими вкладками я использую FragmentPagerAdapter с ViewPager в макете.Вкладки ActionBar и многоэкранная компоновка с ViewPager

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

Тогда у меня есть содержимое, которое у меня есть на вкладках. Оба они расширяют класс Fragment. Первый должен изменить макет в соответствии с устройством. На планшетах ландшафта (layout-sw600dp-land) У меня есть макет с двумя фрагментами, а на других устройствах будет только один фрагмент. Это делается двумя файлами макета в соответствующих папках.

На этих устройствах smaler второй фрагмент используется в качестве диалога.

Я не уверен, как реализовать это все. Первый фрагмент содержит ListView со всеми видами задач. Когда один из них щелкнут, окно редактирования должно появиться в правом фрагменте. На небольших устройствах фрагмент не существует, поэтому его необходимо запустить как Activity. В настоящее время это окно редактирования - FragmentActivity.

Как это сделать? Я не уверен, что это действительно тяжелее, но я думаю, что Фрагмент внутри Фрагмента смущает меня.

+0

У вас есть «ViewPager» с двумя страницами, где первый фрагмент должен будет отображать один или два фрагмента в зависимости от конфигурации макета? – Luksprog

+0

Правильно. Таблетки в ландшафтном режиме должны содержать два фрагмента. – MikkoP

ответ

2

Я не уверен, как реализовать это все.

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

У вас будет фрагмент master/wrapper в ViewPager, который будет представлять собой адаптивную страницу, которая будет иметь один или два вложенных фрагмента в зависимости от текущей конфигурации (эти фрагменты должны быть прикреплены во время выполнения (ограничение вложенные фрагменты)). Зная текущую конфигурацию, вам также необходимо соответствующим образом обрабатывать событие выбора/щелчка/триггера либо путем запуска нового действия (это то, что я понял из вашего вопроса, но вы здесь немного неоднозначны) или настройки фрагмента детали в тот же фрагмент обертки.

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

+0

Я пробовал нечто подобное раньше (и это сейчас). Проблема заключается в том, что в многочастном фрагменте ничего не отображается. Я попытался добавить System.out.printlns для отладки в классе, и ни один из методов, похоже, не вызван. Я говорю о классе, который вы назвали 'MultiPageHandleFragment'. Другой фрагмент показан правильно. Я также придерживался этого: http://www.vogella.com/articles/AndroidFragments/article.html. У меня два макета. Один показывает только один фрагмент, а второй показывает два фрагмента. Вот некоторые из моего кода. http://pastebin.com/ncCLjhYs http://pastebin.com/d67WebXg – MikkoP

+0

Pastebin, похоже, перепутался с углублениями. – MikkoP

+0

@MikkoP Код, который вы отправили, не будет работать (у 'activity_main_view' есть как фрагмент, встроенный в макет (который не должен работать)?). Мой подход (который работает) состоит в том, чтобы иметь «MultiPageHandleFragment» (MainView в вашем коде), который раздувает макет на основе конфигурации (имея только контейнеры для держателей места, а не сами фрагменты!), И на основе раздутого макета добавить внутренний фрагмент как вложенные фрагменты (которые из того, что я видел, вы не делаете). Попробуйте запустить мой образец кода в эмуляторе, чтобы увидеть его в действии, возможно, я не понимаю, чего вы хотите. – Luksprog

0

Первый конвертировать это окно редактирования из действия в фрагмент.

Desing различных страниц для вкладки и мобильного, как: 1. Для Таба - Дизайн страницы, как ListView в левой стороне и framelayout на праве ListView 2. Для устройства - ListView на одной странице и создать другую деятельность для редактирования window

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

Теперь вам нужно проверить, имеет ли Framelayout значение null или нет. Если значение null, ваше приложение работает в телефоне, чтобы вы могли запускать следующую операцию, которая имеет окно редактирования при нажатии элемента списка. Если не null, то у вас есть framelayout в правой части списка, поэтому просто вставьте фрагмент редактирования в framelayout.

Смежные вопросы