Вход в систему - компонент архитектуры навигации

Я реализовал условную навигацию в свой LoginFragment с компонентом архитектуры навигации Android. Проблема, с которой я столкнулся сейчас, заключается в том, что я хотел бы скрыть кнопку вверх на панели инструментов и отключить любую навигацию в приложении, пока пользователь не вошел в систему.

Я хотел бы иметь возможность реализовать это с помощью подхода с одним действием, когда Activity настраивает пользовательский интерфейс навигации в приложении и navController, как в демоверсии android sunflower, а места назначения навигации - это фрагменты.

Я реализовал условную навигацию, как описано здесь: Компонент архитектуры навигации - Экран входа в систему

Как правильно реализовать скрытие навигации и кнопки вверх на экране входа в систему с компонентом архитектуры навигации?

0 ответов

Я не знаю точно, что вы имеете в виду, скрывая навигацию, но я предполагаю, что вы имеете в виду скрытие макета ящика. Чтобы скрыть кнопку вверх и заблокировать ящик, добавьте следующее в onCreate вашего MainActivity. Я использую Kotlin.

myNavController.addOnDestinationChangedListener { _, destination ->
    if (destination.id == R.id.loginFragment) {
        myDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
        myToolbar.setVisibility(View.GONE)
    } else {
        myDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
        myToolbar.setVisibility(View.VISIBLE)
    }

Чтобы сделать только кнопку вверх уйти, используйте myToolbar.setNavigationIcon(null) и чтобы вернуть его использовать myToolbar.setNavigationIcon(R.id.my_icon)

Мой метод добавления страницы входа в корневой набор

    val navController = findNavController(R.id.main_nav_host)
    val appBarConfiguration = AppBarConfiguration(setOf(R.id.home_dest, 
        R.id.user_dest,R.id.login_dest))
    toolbar.setupWithNavController(navController, appBarConfiguration)

Поэтому, когда вы находитесь на странице входа в систему, кнопка возврата отсутствует.

Кнопка возврата системы может переопределить onBackPressed()

  override fun onBackPressed() {
    if (findNavController(R.id.main_nav_host).currentDestination?.id != R.id.next_dest)
      super.onBackPressed()
    }
  }

Извините за мой английский