Навигационный ящик Android

Я пытался изучить новый навигационный ящик, стандартизированный Google. Наконец-то у нас есть и официальный код.

Я пытался понять, как лучше всего реализовать то же самое в моем приложении.

Моя структура приложения выглядит следующим образом

-MainActivity
----Featured Tab
----Favorites Tab

При нажатии любого элемента на любой вкладке он приведет меня ниже

ContentActivity
----Info Tab
----Map Tab

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

И поскольку структура Nav Drawer выглядит примерно так

Activity с макетом, который содержит navdraw-view и внутренний, он содержит макет содержимого и макет ящика. При выборе параметра в ящике я должен полностью заменить макет содержимого или открыть новое действие?


person Harsha M V    schedule 22.05.2013    source источник


Ответы (2)


Как подробно описано в документации по Создание панели навигации в разделе «Обрабатывать события кликов навигации», он работает с использованием фрагментов. Когда пользователь выбирает вариант, вы только заменяете фрагмент содержимого, позволяя навигационному ящику оставаться там, где он есть. Если вы будете следовать документации, то все будет в порядке.

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

person Nick    schedule 22.05.2013
comment
Допустим, у меня есть несколько вкладок во вторых опциях панели навигации. мне нужно динамически создавать вкладки, чтобы заменить весь контент с экрана? - person Harsha M V; 22.05.2013
comment
Неважно, есть ли у вашего второго действия вкладки или нет — каждый экран будет отдельным фрагментом, который вы можете настроить с помощью XML, аналогично представлению. Может быть полезно прочитать о Фрагментах в целом, потому что навигационный ящик — это всего лишь частный случай использования фрагментов. - person Nick; 22.05.2013
comment
спасибо буду читать. похоже, у нас могут быть вкладки внутри фрагментов - person Harsha M V; 22.05.2013
comment
Хотя в примере используется фрагмент (переключение содержимого), это не обязательно требуется. Вы можете делать все, что хотите, в методе selectItem (так что вы также можете начать новую активность, если это предпочтительное действие). Суть в том, что в примере используются фрагменты, но они никоим образом не требуются для этой реализации. - person Booger; 22.05.2013
comment
Поскольку ящик навигации является частью действия, не будет ли запуск нового действия удалять/сбрасывать ящик? Что выглядело бы немного неряшливо. И вам придется включать его в каждое действие. Я согласен с вами, что вы можете реализовать это без фрагментов, но я думаю, что лучше всего с ними. Кроме того, вы можете дать более приятный опыт на планшетах. - person Nick; 22.05.2013
comment
На самом деле я использую фрагменты в своем собственном коде именно для этого сценария (но мы используем Spinner в панели действий, чтобы контролировать, какой фрагмент отключается). Я действительно думаю, что это хорошая идея, однако я не думаю, что это необходимо для Nav Drawer (и фрагменты могут добавить сложности, если вы новый разработчик). - person Booger; 22.05.2013

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

Вы можете делать все, что хотите, в методе selectItem(position).

Официальная документация использует Fragments в своем примере, но это не обязательно. В этом методе вы можете делать все, что хотите (просто начните с сообщения Toast или Logcat, чтобы увидеть, что происходит при щелчке элемента).

person Booger    schedule 22.05.2013
comment
Я чувствую, что иногда документация Google слишком сложна — я думаю, что добавление фрагментов в этот пример усложняет понимание. Я также думаю, что использование внешнего массива для элементов списка слишком сложно (для этого примера). ‹/мыльница› - person Booger; 22.05.2013
comment
Если я запускаю новые действия и хочу, чтобы ящик навигации снова отображался в этих действиях, как мне реализовать это, не переписывая код отображения ящика навигации снова и снова? Я пробовал с BaseActivity, и другие действия, которые затем вызываются из навигационного ящика, являются его подклассами. Проблема в том, что если у меня будет другой макет для новых действий, у меня не будет доступа к макету навигационного ящика. Нужно ли мне включать этот макет навигационного ящика в макеты действий ‹include›..?? - person fischer_zh; 28.07.2013
comment
Начать новый вопрос об этом. Это новая проблема, не рассматриваемая в комментариях. - person Booger; 28.07.2013
comment
Я только что сделал это, извините... > stackoverflow.com/questions/17908120/ - person fischer_zh; 28.07.2013