Я хочу использовать навигационный компонент из Jetpack в моем приложении. Я мог найти базовые примеры работы навигационного компонента + навигация снизу, ниже я показал, как я реализовал, используя эти примеры. Но его работа некорректна для меня - его воссоздание фрагментов при переключении между вкладками. Но я нашел расширение Navatiom от Google https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt, но оно тоже не работает. Я делаю все в соответствии с инструкциями о моей деятельности:
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 (когда saveInstanceState == 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, fragManager) ) установлено в расширении навигации, в этой функции вызывается ошибка в строке val selectedFragment = fragmentManager.findFragmentByTag (newlySelectedItemTag)
с ошибкой kotlin.TypeCastException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment
, поэтому менеджер фрагментов не может найти фрагмент по тегу (?) Пожалуйста, помогите мне, ребята, я исследую эту проблему второй день !