gpt4 book ai didi

ANDROID 导航组件 + BottomNavigationView 带backstack

转载 作者:行者123 更新时间:2023-12-04 14:14:54 25 4
gpt4 key购买 nike

我想在我的应用程序中使用来自 jetpack 的导航组件。我可以找到导航组件 + 底部 View 导航的基本示例工作,下面我展示了我是如何使用这些示例实现的。但它对我来说不正确 - 它在选项卡之间切换时重新创建 fragment 。
但我从谷歌找到了导航扩展 https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt但它也不起作用。我按照我的 Activity 说明做所有事情:


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>

这与示例中的代码完全相同
但是这样不行,fragment不显示,而且如果在Navigation Extention中安装了setupItemReselected(graphIdToTagMap, fragmentManager),在val selectedFragment = fragmentManager.findFragmentByTag (newlySelectedItemTag)这行这个函数就会报错
有错误 kotlin.TypeCastException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment ,所以 fragment 管理器无法按标签(?)
请帮帮我,我第二天研究这个问题!

最佳答案

今天,我面临的问题是我有一个底部导航和导航。但是在单击底部选项卡时没有更改 fragment 。然后我通过为导航图提供与我在菜单项中设置的相同的 ID 来解决问题。这对我有用。正如答案中提到的,我通过@Ильмир Шагабиев 的评论得到了这个线索。将其发布为答案,因为在第一次我没有在评论中注意到这一点。花了一些时间后,我回到同一个帖子并浏览了所有评论。

关于ANDROID 导航组件 + BottomNavigationView 带backstack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61213780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com