Jetpack Navigation Deep Link с неправильной кнопкой ActionBar
Когда я открываю свое приложение с помощью значка запуска, все кнопки навигации и ActionBar работают нормально. Но когда я получаю доступ к приложению по явной глубокой ссылке, мой ActionBar запутывается.
Моя основная навигация:
-> [TaskListFragment] -> [TaskDetailFragment]
При открытии по значку программы запуска кнопка "Назад" отображается правильно:
В моем приложении вы можете создать тревогу для каждой задачи, поэтому, когда звонит будильник и пользователь нажимает на уведомление, процесс выглядит так:
-> [TaskDetailFragment]
Затем он показывает неправильную кнопку: Нажав на иконку ящика, он возвращается к [TaskListFragment]. Поведение правильное, но значок ActionBar - нет.
Вот как я создаю глубокую ссылку:
NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.taskDetailFragment)
.setArguments(arguments)
.createPendingIntent()
Вот полный код на GitHub.
MainActivity со всеми шаблонами навигации.
Я также безуспешно пробовал несколько базовых реализаций, таких как образец компонентов подсолнечника и архитектуры Google.
0 ответов
Я открыл средство отслеживания проблем, как только подумал, что это ошибка в библиотеке.
На самом деле проблема в том, что я использую ActionBarDrawerToggle
для создания настраиваемой анимации ящика на основе разработчика, который ответил на проблему:
"[...] в документации по навигации предлагается вообще не использовать ActionBarDrawerToggle, поскольку переходы обрабатываются за вас"
И в документации по навигации:
Примечание. При использовании NavigationUI помощники на верхней панели приложений автоматически переходят между значком выдвижного ящика и значком "Вверх" при изменении текущего места назначения. Вам не нужно использовать ActionBarDrawerToggle.
Как только мне понадобится ActionBarDrawerToggle
для пользовательской анимации я не могу ее удалить. Чтобы решить эту проблему, мне нужно сначала вызвать настройку моего ящика сActionBarDrawerToggle
определение, а затем вызовите методы настройки навигации, например NavigationUI.setupActionBarWithNavController()
.
TL;DR
Если вы используете ActionBarDrawerToggle
с Jetpack Navigation
убедитесь, что вы установили ActionBarDrawerToggle
прежде чем позвонить Navigation
методы.