Проблема с навигацией Android: несколько обратных стеков ⇐ Android
Проблема с навигацией Android: несколько обратных стеков
Моя проблема в том, что когда я пытаюсь изменить фрагмент с помощью нижней навигации, он работает, за исключением одного случая. У меня 5 фрагментов, когда я захожу в 3-й и после перехода на 5-й, иконка 5-го не меняет цвет. После этого, когда я делаю еще одну навигацию, приложение вылетает и выдает следующую ошибку:
java.lang.IndexOutOfBoundsException: fromIndex = -1 в java.util.ArrayList.subListRangeCheck(ArrayList.java:1014) в java.util.ArrayList.subList(ArrayList.java:1008) в androidx.navigation.fragment.FragmentNavigator.popBackStack(FragmentNavigator.kt:80) в androidx.navigation.NavController.popBackStackInternal(NavController.kt:275) в androidx.navigation.NavController.popBackStackInternal(NavController.kt:558) в androidx.navigation.NavController.navigate(NavController.kt:1682) в androidx.navigation.NavController.navigate(NavController.kt:1541) в androidx.navigation.NavController.navigate(NavController.kt:1468) в androidx.navigation.ui.NavigationUI.onNavDestinationSelected(NavigationUI.kt:92) в androidx.navigation.ui.NavigationUI.setupWithNavController$lambda-6(NavigationUI.kt:602) в androidx.navigation.ui.NavigationUI.$r8$lambda$6wzEv9QqEZKdQFS1sQQy-bdQvgE (неизвестный источник: 0) в androidx.navigation.ui.NavigationUI$$ExternalSyntheticLambda2.onNavigationItemSelected (неизвестный источник: 2) на com.google.android.material.navigation.NavigationBarView$1.onMenuItemSelected(NavigationBarView.java:295) в androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834) в androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158) в androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985) на com.google.android.material.navigation.NavigationBarMenuView$1.onClick(NavigationBarMenuView.java:133) в android.view.View.performClick(View.java:7520) в android.view.View.performClickInternal(View.java:7489) в android.view.View.access$3600(View.java:826) в android.view.View$PerformClick.run(View.java:28555) в android.os.Handler.handleCallback(Handler.java:938) в android.os.Handler.dispatchMessage(Handler.java:99) в android.os.Looper.loop(Looper.java:233) в android.app.ActivityThread.main(ActivityThread.java:8010) в java.lang.reflect.Method.invoke (собственный метод) по адресу com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978) Но если раньше я нажал на 5-й фрагмент и перешел на 3-й, а после 5-го снова, то все работает корректно.
Что касается моего кода, я следую этому руководству, и код в обоих случаях один и тот же.
редактировать: вот мой код для добавления навигации в MainActivity:
переопределить fun onCreate(savedInstanceState: Пучок?) { super.onCreate(savedInstanceState) привязка = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) если (savedInstanceState == ноль) { настройкаBottomNavigationBar() } личное развлечение setupBottomNavigationBar(){ val графики = setOf( R.id.firstFragment, R.id.второй фрагмент, R.id.третийфрагмент, R.id.fourthFragment, R.id.fithFragment ) val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_container) как NavHostFragment currentNavController = navHostFragment.navController val BottomNavigation = findViewById(R.id.bottom_navigation) BottomNavigation.setupWithNavController(currentNavController) appBarConfiguration = AppBarConfiguration(графики) } activity_main.xml
bottom_nav.xml
И super_nav.xml
Моя проблема в том, что когда я пытаюсь изменить фрагмент с помощью нижней навигации, он работает, за исключением одного случая. У меня 5 фрагментов, когда я захожу в 3-й и после перехода на 5-й, иконка 5-го не меняет цвет. После этого, когда я делаю еще одну навигацию, приложение вылетает и выдает следующую ошибку:
java.lang.IndexOutOfBoundsException: fromIndex = -1 в java.util.ArrayList.subListRangeCheck(ArrayList.java:1014) в java.util.ArrayList.subList(ArrayList.java:1008) в androidx.navigation.fragment.FragmentNavigator.popBackStack(FragmentNavigator.kt:80) в androidx.navigation.NavController.popBackStackInternal(NavController.kt:275) в androidx.navigation.NavController.popBackStackInternal(NavController.kt:558) в androidx.navigation.NavController.navigate(NavController.kt:1682) в androidx.navigation.NavController.navigate(NavController.kt:1541) в androidx.navigation.NavController.navigate(NavController.kt:1468) в androidx.navigation.ui.NavigationUI.onNavDestinationSelected(NavigationUI.kt:92) в androidx.navigation.ui.NavigationUI.setupWithNavController$lambda-6(NavigationUI.kt:602) в androidx.navigation.ui.NavigationUI.$r8$lambda$6wzEv9QqEZKdQFS1sQQy-bdQvgE (неизвестный источник: 0) в androidx.navigation.ui.NavigationUI$$ExternalSyntheticLambda2.onNavigationItemSelected (неизвестный источник: 2) на com.google.android.material.navigation.NavigationBarView$1.onMenuItemSelected(NavigationBarView.java:295) в androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834) в androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158) в androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985) на com.google.android.material.navigation.NavigationBarMenuView$1.onClick(NavigationBarMenuView.java:133) в android.view.View.performClick(View.java:7520) в android.view.View.performClickInternal(View.java:7489) в android.view.View.access$3600(View.java:826) в android.view.View$PerformClick.run(View.java:28555) в android.os.Handler.handleCallback(Handler.java:938) в android.os.Handler.dispatchMessage(Handler.java:99) в android.os.Looper.loop(Looper.java:233) в android.app.ActivityThread.main(ActivityThread.java:8010) в java.lang.reflect.Method.invoke (собственный метод) по адресу com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978) Но если раньше я нажал на 5-й фрагмент и перешел на 3-й, а после 5-го снова, то все работает корректно.
Что касается моего кода, я следую этому руководству, и код в обоих случаях один и тот же.
редактировать: вот мой код для добавления навигации в MainActivity:
переопределить fun onCreate(savedInstanceState: Пучок?) { super.onCreate(savedInstanceState) привязка = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) если (savedInstanceState == ноль) { настройкаBottomNavigationBar() } личное развлечение setupBottomNavigationBar(){ val графики = setOf( R.id.firstFragment, R.id.второй фрагмент, R.id.третийфрагмент, R.id.fourthFragment, R.id.fithFragment ) val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_container) как NavHostFragment currentNavController = navHostFragment.navController val BottomNavigation = findViewById(R.id.bottom_navigation) BottomNavigation.setupWithNavController(currentNavController) appBarConfiguration = AppBarConfiguration(графики) } activity_main.xml
bottom_nav.xml
И super_nav.xml
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Несколько обратных стеков без очистки родительского стека (JetPack Compose)
Anonymous » » в форуме Android - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Вопрос об использовании монотонных стеков для решения проблемы области гистограммы
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-