我在应用程序中遇到导航问题。当点击android系统中的后退按钮时,我将从apk中退出。我需要在startFragment - register/loginFragment和之间进行堆叠 着陆片段 - 排名片段。
像这样我使用 navigationBottomBar 在片段之间跳转
val navHostFragment = supportFragmentManager.findFragmentById(binding.mainFragmentConteinerView.id) as NavHostFragment
navController = navHostFragment.navController
NavigationUI.setupWithNavController(binding.mainNavMenu, navController)
(https://i.sstatic.net/tr46X51y.png)
我尝试在导航设计工具中修复它。
如果您使用 Android Navigation Jetpack (https://developer.android.com/guide/navigation/migrate),则需要确保您使用的是 单活动架构
(https://medium.com/appcent/a-single-activity-vs-multiple-activities-architecture-96a23b783036)
这基本上是您的应用程序的整个导航架构由一个 Activity 管理,托管单个 FragmentContainerView。
所以在你的 MainActivity 的布局文件中,有这样的内容:
<androidx.fragment.app.FragmentContainerView
android:id="@+id/core_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/name_of_nav_graph_for_your_app"
android:name="androidx.navigation.fragment.NavHostFragment"
/>
然后您需要将 NavController 范围限定为 MainActivity,这基本上就是您的 FragmentContainerView。
所以在你的情况下(在你的 MainActivity 的 OnStart() 内)
val navController = findNavController(R.id.core_container)
// then to navigate to the next page (from home, to login screen, and to anyother screen, just pass the id of the fragment in your nav graph. In this case we're navigating from the launch screen to the login screen)
navController.navigate(R.id.login_screen_fragment_in_nav_graph, null)
屏幕会自动添加到后退堆栈中,因此通过按后退按钮,您将删除堆栈中的当前页面。