Android 导航组件 - 带有登录屏幕

Android navigation component- With Login screens

在处理登录屏幕时,我正在尝试找出更好的方法 - 要么执行导航 "action" 以在首次使用时转到登录片段(并将后退按钮隐藏到实际应用程序),要么启动一个新登录 activity(有自己的导航图)。对于第一种方法(仅使用导航组件),我不知道如何在不破解的情况下删除后退按钮 "hide"。我尝试使用 navoptions、setpopupto 等,但它不起作用。代码如下:

val navOptions = NavOptions.Builder()
                .setPopUpTo(R.id.home_fragment, true)
                .build()

host?.navController?.navigate(R.id.action_global_signUpFragment_dest, null, navOptions)

那么两个问题: 1) 如何仅使用导航组件正确处理登录转换? 2) 使用单独的导航图开始新登录 activity 是更好的主意吗?

我认为第一种方法更好。 要在 signUpFragment 中隐藏工具栏上的 'back' 按钮,您可以使用 AppBarConfiguration,并自定义哪些目的地被视为顶级目的地。 例如:

val appBarConfiguration = AppBarConfiguration.Builder(setOf(R.id.home_fragment, R.id.signUpFragment_dest)).build()
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration)

这样 home_fragment 和 signUpFragment_dest 将被视为顶级目标,工具栏上不会有后退按钮。

解决后退按钮问题的另一种选择是我的做法。此外,我没有 show/hide 底部导航栏,而是有两个 NavHostFragment,一个是全屏主屏幕,另一个包含在主页片段中(底部导航栏上方)。

当我想导航到全屏视图时,我调用了这个扩展函数,

fun Fragment.findMainNavController(): NavController =
    Navigation.findNavController(activity!!, R.id.nav_host_fragment)

然后通过主图导航。

这对我来说在概念上是有意义的,有父级和子级导航图。