Вход в систему - компонент архитектуры навигации
Я реализовал условную навигацию в свой 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()
}
}
Извините за мой английский