Я бы хотел, чтобы поведение было похоже на YouTube:

  • есть панель инструментов и нижние вкладки
  • при переходе в «Библиотеку» (5-я вкладка) кнопка вверх не появляется
  • войдя в "Мои видео", появится кнопка вверх

Вот мои ограничения:

  • использовать навигацию на реактивном ранце
  • используйте Toolbar (внутри AppBarLayout, если это важно)
  • есть нижние вкладки (BottomNavigationView)
  • все нижние вкладки относятся к "верхнему уровню" в том смысле, что они не меняют кнопку Toolbar вверх
  • другие экраны приложений не являются «верхним уровнем» и должны иметь стрелку вверх
  • одна из вкладок - это пункт назначения по умолчанию для навигационного графика

По умолчанию, когда все реализовано, навигация выполняется автоматически библиотекой Jetpack Navigation. Я подключаю панель инструментов к контроллеру навигации с помощью этого помощника:

NavigationUI.setupWithNavController(main_toolbar, navController)

Это работает хорошо, но если я переключаю одну из нижних вкладок, появляется кнопка вверх, и при ее нажатии происходит возврат к месту назначения по умолчанию.

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

3
Benoit Duffez 11 Ноя 2018 в 16:52

1 ответ

Лучший ответ

Вы можете указать AppBarConfiguration в качестве третьего параметра для NavigationUI.setupWithNavController. И передайте ему назначения верхнего уровня, например:

Set<Integer> topLevelDestinations = new HashSet<>();
topLevelDestinations.add(R.id.navigation_home);
topLevelDestinations.add(R.id.navigation_trending);
topLevelDestinations.add(R.id.navigation_subscriptions);
topLevelDestinations.add(R.id.navigation_inbox);
topLevelDestinations.add(R.id.navigation_library);

AppBarConfiguration appBarConfiguration = new AppBarConfiguration
        .Builder(topLevelDestinations)
        .build();
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration);

Дополнительные сведения: AppBarConfiguration.

7
Alexey Denysenko 11 Ноя 2018 в 17:58