Приложение вылетает при размещении более 28 «составных» элементов внутри AnimatedNavHost (Jetpack Compose)

#android #navigation #android-jetpack-compose #arrayindexoutofboundsexception

Вопрос:

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

Мой навигационный компонент анимировал Navhost как:

 AnimatedNavHost(
            navController = navController,
            startDestination = Constants.SPLASH,
            enterTransition = { initial, _ ->
                slideInHorizontally(initialOffsetX = { 1000 })

            },
            exitTransition = { _, target ->
                slideOutHorizontally(targetOffsetX = { -1000 })

            },
            popEnterTransition = { initial, _ ->

                slideInHorizontally(initialOffsetX = { -1000 })

            },

            popExitTransition = { _, target ->

                slideOutHorizontally(targetOffsetX = { 1000 })

            }

        ) {
            composable(Constants.SPLASH) {
                Splash(navController = navController)


            }
            composable(Constants.HIW) {

                LogoPage(
                    false,
                    true,
                    navController = navController
                ) { HowItWorks(navController = navController, false) }

.
.
.

//Other 26 'composable' elements
}
 

Когда я добавляю еще 1 «составной» элемент, мое приложение аварийно завершает работу, и logcat говорит:

  java.lang.ArrayIndexOutOfBoundsException: length=29; index=29
        at androidx.collection.SparseArrayCompat.valueAt(SparseArrayCompat.java:379)
        at androidx.navigation.NavController.setGraph(NavController.kt:948)
        at androidx.navigation.NavController.setGraph(NavController.kt:95)
        at com.google.accompanist.navigation.animation.AnimatedNavHostKt.AnimatedNavHost(AnimatedNavHost.kt:146)
        at com.google.accompanist.navigation.animation.AnimatedNavHostKt.AnimatedNavHost(AnimatedNavHost.kt:85)
 

Как мне решить эту проблему?

Я много чего пытался, но так и не смог решить. Кроме того, похоже, что об этом нет никакой информации в Интернете.

Пожалуйста, помогите!

Ответ №1:

Об этом сообщается в этом выпуске.

Примечание: «Больше не будет ArrayIndexOutOfBoundsException при вызове setGraph с графиком с 13 или 29 пунктами назначения».

Это должно быть исправлено с помощью навигации 2.4.0-alpha08

Комментарии:

1. Теперь я получаю java.util. Список ArrayList не может быть приведен к java.util.Set

2. @SparshDutta Я думаю, что это совершенно другая проблема.

3. Этого не происходит при использовании «NavHost» вместо AnimatedNavHost

4. @SparshDutta Хорошо, но ваш вопрос и мой ответ примерно ArrayIndexOutOfBoundsException: length=29; index=29 . Это еще один вопрос.