Android Navigation Drawer в Deep Navigation

Мое приложение использует новый навигационный ящик в макете корневого действия. Каждый из элементов в ящике является фрагментом (точно так же, как демонстрирует пример проекта). Тем не менее, у меня есть более глубокая навигация, и в рекомендациях говорится: «Если у вас особенно глубокие ветки, переход на верхний уровень вашего приложения может стать повторяющимся и громоздким только с помощью «Вверх» и «Назад». Поскольку навигационные панели доступны из любого места в приложении. , навигация на верхний уровень выполняется быстрее и эффективнее», подразумевая, что панель должна быть доступна смахиванием с левой стороны экрана практически в любом месте приложения (см. пример в Play Music), а не только в корне Мероприятия.

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


person Eric Cochran    schedule 23.06.2013    source источник
comment
Включите навигационный ящик во все дополнительные действия.   -  person Lesleh    schedule 24.06.2013
comment
Однако для этого мне нужно было бы воспроизвести много кода и макета. Что нормально; Я просто хочу убедиться, что это лучший способ сделать это.   -  person Eric Cochran    schedule 24.06.2013


Ответы (1)


Google определенно плохо объяснил это, так как мне потребовалось некоторое время, чтобы найти его самостоятельно. Правильный способ справиться с этим — использовать FragmentTransactions для добавления/замены контейнеров внутри ваш существующий макет панели навигации, в частности addToBackStack()< /a> метод, чтобы указать Android, что нужно рассматривать его как транзакцию навигации.

Мне пришлось собрать это воедино из их статьи Предоставление правильной обратной навигации, что объясняет, как это делается для фрагментов. Один интересный момент заключается в том, что вам не нужно «добавлять» фрагменты друг на друга, вы можете просто заменить активный. Когда пользователь нажимает «Назад», FragmentManager Android открывает транзакцию и вернуть его в предыдущее состояние.

Кроме того, вы, вероятно, также захотите вызвать setTransition(int transit) в вашей транзакции, чтобы она анимировалась, как активность. Вот пример того, что я использую в своих проектах:

getFragmentManager().beginTransaction()
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .replace(R.id.container, newFragment);
                    .addToBackStack(null);
                    .commit();

Нажатие «Назад» из этого выполнит противоположную анимацию и вернется в предыдущее состояние до того, как транзакция произошла.

Я знаю, что опаздываю, но надеюсь, что это кому-то поможет!

person dooleyo    schedule 29.10.2014