片段未添加到导航堆栈

问题描述 投票:0回答:1

我在应用程序中遇到导航问题。当点击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 firebase navigation
1个回答
0
投票

如果您使用 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)

屏幕会自动添加到后退堆栈中,因此通过按后退按钮,您将删除堆栈中的当前页面。

© www.soinside.com 2019 - 2024. All rights reserved.