Jetpack Navigation Deep Link с неправильной кнопкой ActionBar - PullRequest
2 голосов
/ 18 мая 2019

Когда я открываю свое приложение с помощью значка запуска, все кнопки навигации и панели действий работают нормально. Но когда я получаю доступ к приложению по явной глубокой ссылке, мой ActionBar запутывается.

Моя основная навигация:

-> [TaskListFragment] -> [TaskDetailFragment]

При открытии по значку программы запуска кнопка «Назад» правильно показывает: Correct behavior

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

-> [TaskDetailFragment]

Затем отображается неверная кнопка: Wrong behavior Нажав на иконку ящика, он возвращается к [TaskListFragment]. Поведение правильное, но значок ActionBar - нет.

Вот как я создаю глубокую ссылку:

NavDeepLinkBuilder(context)
            .setGraph(R.navigation.nav_graph)
            .setDestination(R.id.taskDetailFragment)
            .setArguments(arguments)
            .createPendingIntent()

Вот полный код GitHub .

MainActivity со всеми шаблонами навигации.

И Мой навигационный график .

Я также безуспешно пробовал несколько базовых реализаций, таких как Sunflower от Google и Образец компонентов архитектуры.

1 Ответ

0 голосов
/ 07 июня 2019

Я открыл Issue Tracker , как только я подумал, что это ошибка в библиотеке.

На самом деле проблема в том, что я использую ActionBarDrawerToggle для создания пользовательской анимации Drawerи основываясь на разработчике, который ответил на проблему:

"[...] в навигационной документации предлагается вообще не использовать ActionBarDrawerToggle, поскольку переходы обрабатываются для вас"

А в Navigation docs :

Примечание. При использовании NavigationUI помощники верхней панели приложений автоматически переключаются между значком ящика и значком «Вверх» при изменении текущего назначения.Вам не нужно использовать ActionBarDrawerToggle.

Как только мне понадобится ActionBarDrawerToggle для пользовательской анимации, я не могу его удалить.Чтобы решить эту проблему, мне нужно сначала вызвать мою настройку Drawer с определением ActionBarDrawerToggle, а затем вызвать методы настройки навигации, такие как NavigationUI.setupActionBarWithNavController().


TL; DR

Если вы используете ActionBarDrawerToggle с Jetpack Navigation, убедитесь, что вы установили ActionBarDrawerToggle, прежде чем вызывать методы Navigation.

...