我想在我的应用程序中使用来自 jetpack 的导航组件。我可以找到导航组件 + 底部视图导航的基本示例工作,下面我展示了我是如何使用这些示例实现的。但它对我来说不正确 - 它在选项卡之间切换时重新创建片段。但我从谷歌https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt找到了 navigatiom 扩展,但它也不起作用。我按照我的活动说明做所有事情:
private fun setupBottomNavigationBar() {
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.nav_bottom)
val navGraphIds = listOf(
R.navigation.home_nav,
R.navigation.search_nav,
R.navigation.scheduled_nav,
R.navigation.profile_nav
)
val controller = bottomNavigationView.setupWithNavController(
navGraphIds,
supportFragmentManager,
R.id.nav_host_container,
intent
)
controller.observe(this, Observer { navController ->
setupActionBarWithNavController(navController)
})
currentNavController = controller
}
我在 onCreate (当 savedInstanceState == null 时)和 onRestoreInstanceState 我的布局文件中调用此函数:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".app.ui.main.MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/nav_bottom"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/back_bottom_navigation"
android:layout_alignParentBottom="true"
app:menu="@menu/bot_nav_menu"
app:labelVisibilityMode="unlabeled"
app:itemIconTint="@color/bot_navigation_items"
app:itemTextColor="@color/bot_navigation_items"
/>
</LinearLayout>
这与示例中的代码完全相同但是这不起作用,不显示片段,并且如果在导航扩展中安装了 setupItemReselected (graphIdToTagMap, fragmentManager),则会在该函数中导致错误 val selectedFragment = fragmentManager.findFragmentByTag (newlySelectedItemTag)
with error kotlin.TypeCastException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment
,所以片段管理器无法按标签找到片段(?)请帮帮我,我第二天研究这个问题!