PopUpTo компонента навигации не удаляет кнопку вверх

Я использую компонент архитектуры навигации, и у меня есть настройка, аналогичная этой для извлечения стека при переходе к определенному фрагмент:

<action
  android:id="@+id/navigate_to_main_screen"
  app:destination="@id/fragment_main_screen"
  app:popUpTo="@+id/navigation_main"
  app:popUpToInclusive="true"/>

Это работает почти так, как ожидалось. И системная кнопка «Назад», и значок «Вверх» на панели приложений не позволяют перейти к предыдущему фрагменту. Системная кнопка «Назад» закрывает приложение.

Тем не менее, кнопка «вверх» на панели приложений по-прежнему существует, нажатие на нее ничего не делает, как ожидалось. Что я делаю не так? Почему это все еще здесь?

В основной деятельности у меня уже есть

AppBarConfiguration config =
    new AppBarConfiguration.Builder(navController.getGraph()).build();
NavigationUI.setupActionBarWithNavController(this, navController, config);

и

@Override
public boolean onSupportNavigateUp() {
  return navController.navigateUp() || super.onSupportNavigateUp();
}

Согласно документации.

Версия библиотеки, которую я использую:

implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha09'
implementation 'android.arch.navigation:navigation-ui:1.0.0-alpha09'

person Danish Khan    schedule 02.01.2019    source источник


Ответы (1)


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

Чтобы решить вашу проблему, замените

AppBarConfiguration config =
    new AppBarConfiguration.Builder(navController.getGraph()).build();

С

AppBarConfiguration config =
        new AppBarConfiguration.Builder(R.id.navigation_main, R.id.fragment_main_screen).build();

Подробнее здесь: AppBarConfiguration.

person Alexey Denysenko    schedule 02.01.2019
comment
Требуется ли для работы ActionBar/DrawerLayout? - person Andrzej Zabost; 18.09.2019