Android: несколько просмотров, глубокая навигация, одна активность.Каков наилучший способ справиться? - PullRequest
0 голосов
/ 31 марта 2012

Я ищу лучший способ воспроизвести в приложении для Android поведение iPhone UiNavigationController в UITabBarController .

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

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

Проблема в том, что Android контролирует навигацию по действиям внутри приложения, если вы нажмете кнопку «Назад», она перейдет к предыдущему, но если я перемещаюсь по представлениям, использую одно действие и нажимаю назад, оно просто заканчиваю это. Итак, как я могу иметь плавную навигацию между представлениями в Activity?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2012

Я реализовал это, используя TabActivity с FragmentActivity в качестве каждой вкладки. Используя Fragments API, вы можете упорядочить код так же, как если бы вы использовали 12 различных действий, фактически используя только 1 для каждой вкладки. Фреймворк фрагмента будет обрабатывать нажатие клавиши назад, чтобы вы могли показать предыдущий фрагмент, а не закрывать всю активность.

Есть некоторые проблемы с таким подходом, например, нет MapFragment, но обходные пути можно найти здесь, на SOF.

Вам потребуется пакет поддержки Android, если ваша минимальная версия SDK ниже 3.0.

0 голосов
/ 31 марта 2012

Ну, я очень мало знаю о UiNavigationViewController, но я думаю, вы хотите что-то перемещаться между различными видами. Поскольку вы используете TabActivity, каждая вкладка должна загружаться в отдельный Activity.
Но так как вы хотите разветвлять его, использование такого множества действий не является идеальным решением, равно как и ActivityGroup. На мой взгляд, лучшее решение (однажды я столкнулся с подобной проблемой) состоит в том, чтобы главные или корневые вкладки загружались в отдельное действие, но для их ветвей используйте ViewFlipper, который переворачивает представления. Таким образом, весь макет (подкласс просмотра) можно перевернуть.
Вы можете столкнуться с какой-то проблемой, переворачивая более двух видов (как говорят люди, хотя у меня никогда не было проблем). Поэтому в этом случае вы можете использовать layout.setVisibility(View.GONE), чтобы скрыть макет и просто изменить его на View.VISIBLE для следующего просмотра.
А что касается кнопки возврата, вам нужно сохранить последний использованный View или Activity в переменной, а в переопределении onBackPressed(), просто нужно вызвать их.

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

...