Нажатие кнопки для перехода на другой экран вызывает исключение java.lang.IllegalArgumentException: невозможно перейти кAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Нажатие кнопки для перехода на другой экран вызывает исключение java.lang.IllegalArgumentException: невозможно перейти к

Сообщение Anonymous »


Я создал приложение для изучения нижней панели навигации с помощью Android Jetpack Compose, а затем решил расширить его. Добавлен экран входа в систему.

В MainActivity я вызываю функцию MainScreen.

@Composable весело MainScreen() { val navController = RememberNavController() var showTopBar by RememberSaveable { mutableStateOf(true) } // чтобы скрыть верхнюю панель на экране входа в систему var showBottomBar by RememberSaveable { mutableStateOf(true) } // чтобы скрыть нижнюю панель на экране входа в систему val navBackStackEntry от navController.currentBackStackEntryAsState() showTopBar = когда (navBackStackEntry?.destination?.route) { «логин» -> ложь еще -> правда } showBottomBar = когда (navBackStackEntry?.destination?.route) { «логин» -> ложь еще -> правда } Строительные леса( topBar = { if (showTopBar) MyTopAppBar() }, BottomBar = { если (showBottomBar) BottomNavigationBar (navController) }, содержание = { Box(modifier = Modifier.padding(it)) { Навигация (navController = navController) } } ) } Это функция навигации.

@Composable забавная навигация (navController: NavHostController) { NavHost(navController = navController, startDestination = NavigationItem.Login.route) { составной (NavigationItem.Lessons.route) { Экран Уроков() } составной (NavigationItem.Practice.route) { ПрактикаЭкран() } составной (NavigationItem.Profile.route) { ПрофильЭкран() } составной (NavigationItem.Login.route) { Экран входа в систему() } } } Функция для нижней панели навигации.

@Composable весело BottomNavigationBar (navController: NavController) { val items = listOf( НавигационныйПредмет.Уроки, НавигационныйПредмет.Практика, NavigationItem.Profile ) Панель навигации { val navBackStackEntry от navController.currentBackStackEntryAsState() val currentRoute = navBackStackEntry?.destination?.route items.forEach { элемент -> НавигационныйБарItem( метка = {Текст(item.title)}, значок = { Икона( художник = PainterResource(item.icon), contentDescription = item.title, модификатор = Modifier.size(25.dp) ) }, выбрано = currentRoute == item.route, onClick = { navController.navigate(item.route) { navController.graph.startDestinationRoute?.let { маршрут -> popUpTo (маршрут) { saveState = правда } } запускSingleTop = правда восстановлениестате = истина } }, ) } } } Класс NavigationItem для экранов как объектов. Изначально предполагалось только для BottomNavigationBar. Затем я добавил объект Login.

запечатанный класс NavigationItem( вар маршрут: Строка, значок переменной: Int, переменное название: String ) { Уроки объектов: NavigationItem( маршрут = "уроки", значок = R.drawable.book, title = "Уроки" ) объект Практика: NavigationItem( маршрут = "практика", значок = R.drawable.practice, title = "Практика" ) Профиль объекта: NavigationItem( маршрут = "профиль", значок = R.drawable.user, заголовок = "Профиль" ) Логин объекта: NavigationItem( маршрут = "логин", icon = R.drawable.book, // не может передать ноль заголовок = "Войти" ) } И функция LoginSection — часть LoginScreen

@Composable частное развлечение LoginSection() { val navController = RememberNavController() Логинтекстовое поле( метка = "Электронная почта", конечный = "", модификатор = Модификатор.fillMaxWidth() ) Spacer(модификатор = Modifier.height(MaterialTheme.dimens.small2)) Логинтекстовое поле( метка = "Пароль", трейлинг = "Забыли?", модификатор = Модификатор.fillMaxWidth() ) Spacer(модификатор = Modifier.height(MaterialTheme.dimens.small3)) Кнопка( модификатор = Модификатор .fillMaxWidth() .height(MaterialTheme.dimens.buttonHeight), onClick = { // проблема здесь navController.navigate(NavigationItem.Lessons.route) }, цвета = ButtonDefaults.buttonColors( ContainerColor = if (isSystemInDarkTheme()) BlueGray else Black, contentColor = Цвет.Белый ), форма = RoundedCornerShape (размер = 4.dp) ) { Текст( текст = "Войти", стиль = MaterialTheme.typography.labelMedium.copy(fontWeight = FontWeight.Medium) ) } } Когда я нажимаю кнопку «Войти», я получаю следующее:

java.lang.IllegalArgumentException: невозможно перейти к NavDeepLinkRequest { uri = android-app://androidx.navigation/lessons }. График навигации не установлен для NavController. androidx.navigation.NavHostController@e54b35e.

Я знаю, что мне придется изменить код, если я хочу добавить больше экранов и функций, но я не могу понять, в чем именно сейчас заключается проблема. Благодарим за помощь.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»