Gra*_*ray 6 android android-navigation android-navigationview android-navigation-bar android-navigation-graph
我的问题是,当我尝试使用底部导航更改片段时,它会起作用,但在一种情况下除外。我有 5 个片段,当我进入第 3 个片段并进入第 5 个片段后,第 5 个片段的图标 don\xc2\xb4t 改变了它的颜色。之后,当我进行另一次导航时,应用程序崩溃并给出下一个错误:
\njava.lang.IndexOutOfBoundsException: fromIndex = -1\n at java.util.ArrayList.subListRangeCheck(ArrayList.java:1014)\n at java.util.ArrayList.subList(ArrayList.java:1008)\n at androidx.navigation.fragment.FragmentNavigator.popBackStack(FragmentNavigator.kt:80)\n at androidx.navigation.NavController.popBackStackInternal(NavController.kt:275)\n at androidx.navigation.NavController.popBackStackInternal(NavController.kt:558)\n at androidx.navigation.NavController.navigate(NavController.kt:1682)\n at androidx.navigation.NavController.navigate(NavController.kt:1541)\n at androidx.navigation.NavController.navigate(NavController.kt:1468)\n at androidx.navigation.ui.NavigationUI.onNavDestinationSelected(NavigationUI.kt:92)\n at androidx.navigation.ui.NavigationUI.setupWithNavController$lambda-6(NavigationUI.kt:602)\n at androidx.navigation.ui.NavigationUI.$r8$lambda$6wzEv9QqEZKdQFS1sQQy-bdQvgE(Unknown Source:0)\n at androidx.navigation.ui.NavigationUI$$ExternalSyntheticLambda2.onNavigationItemSelected(Unknown Source:2)\n at com.google.android.material.navigation.NavigationBarView$1.onMenuItemSelected(NavigationBarView.java:295)\n at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)\n at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)\n at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)\n at com.google.android.material.navigation.NavigationBarMenuView$1.onClick(NavigationBarMenuView.java:133)\n at android.view.View.performClick(View.java:7520)\n at android.view.View.performClickInternal(View.java:7489)\n at android.view.View.access$3600(View.java:826)\n at android.view.View$PerformClick.run(View.java:28555)\n at android.os.Handler.handleCallback(Handler.java:938)\n at android.os.Handler.dispatchMessage(Handler.java:99)\n at android.os.Looper.loop(Looper.java:233)\n at android.app.ActivityThread.main(ActivityThread.java:8010)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)\nRun Code Online (Sandbox Code Playgroud)\n但是,如果之前我单击了第 5 个片段并转到第 3 个片段,然后在第 5 个片段之后再次单击,则它可以正常工作。
\n对于我的代码,我遵循本教程 ,并且两种情况下的代码都是相同的。
\n编辑:这是我在 MainActivity 中添加导航的代码:
\noverride fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n binding = ActivityMainBinding.inflate(layoutInflater)\n setContentView(binding.root)\n if(savedInstanceState == null){\n setupBottomNavigationBar()\n }\nprivate fun setupBottomNavigationBar(){\n val graphs = setOf(\n R.id.firstFragment,\n R.id.secondFragment,\n R.id.thirdFragment,\n R.id.fourthFragment,\n R.id.fithFragment\n )\n val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_container) as NavHostFragment\n\n currentNavController = navHostFragment.navController\n\n val bottomNavigation = findViewById<BottomNavigationView>(R.id.bottom_navigation)\n bottomNavigation.setupWithNavController(currentNavController)\n appBarConfiguration = AppBarConfiguration(graphs)\n}\nRun Code Online (Sandbox Code Playgroud)\n活动主文件
\n<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\nandroid:orientation="vertical"\ntools:context=".activities.MainActivity">\n<androidx.fragment.app.FragmentContainerView\n android:id="@+id/nav_host_container"\n android:layout_width="match_parent"\n android:layout_height="0dp"\n android:layout_weight="1"\n android:name="androidx.navigation.fragment.NavHostFragment"\n app:defaultNavHost="true"\n app:navGraph="@navigation/super_nav"\n />\n<com.google.android.material.bottomnavigation.BottomNavigationView\n android:id="@+id/bottom_navigation"\n android:layout_width="match_parent"\n android:layout_height="wrap_content"\n app:menu="@menu/bottom_nav"\n app:itemIconTint="@drawable/botton_navigation_colors"\n app:labelVisibilityMode="unlabeled"\n app:itemIconSize="35dp"\n />\nRun Code Online (Sandbox Code Playgroud)\n\n底部导航.xml
\n<menu xmlns:android="http://schemas.android.com/apk/res/android">\n<item\n android:id="@+id/first_navigation"\n android:icon="@drawable/ic_first_black"\n android:contentDescription="@string/first_desc"\n android:title="@string/first_title" />\n\n<item\n android:id="@+id/second_navigation"\n android:icon="@drawable/ic_second"\n android:contentDescription="@string/second_desc"\n android:title="@string/second_title" />\n\n<item\n android:id="@+id/third_navigation"\n android:icon="@drawable/ic_third"\n android:contentDescription="@string/third_desc"\n android:title="@string/third_title" />\n\n<item\n android:id="@+id/fourth_navigation"\n android:icon="@drawable/ic_fourth"\n android:contentDescription="@string/fourth_desc"\n android:title="@string/fourth_title" />\n\n<item\n android:id="@+id/fifth_navigation"\n android:icon="@drawable/ic_fifth"\n android:contentDescription="@string/fifth_desc"\n android:title="@string/fifth_title" />\nRun Code Online (Sandbox Code Playgroud)\n\n和 super_nav.xml
\n<navigation xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nandroid:id="@+id/super_nav"\napp:startDestination="@+id/main_navigation">\n\n<include app:graph="@navigation/first_navigation"/>\n<include app:graph="@navigation/second_navigation"/>\n<include app:graph="@navigation/third_navigation" />\n<include app:graph="@navigation/fourth_cart_navigation" />\n<include app:graph="@navigation/fifth_navigation" />\nRun Code Online (Sandbox Code Playgroud)\n\n
小智 4
我刚刚解决了非常类似的问题。我的问题是,我在多个导航子图中具有相同 id 的目的地。我是说:
<include app:graph="@navigation/first_sub_graph"/>
<include app:graph="@navigation/second_sub_graph"/>
<navigation
android:id="@+id/first_sub_graph"
..>
...
<fragment
android:id="@+id/**destinationID_1**"
...
/>
</navigation>
<navigation
android:id="@+id/second_sub_graph"
..>
...
<fragment
android:id="@+id/**destinationID_1**"
...
/>
</navigation>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |