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)
然后通过主图导航。
这对我来说在概念上是有意义的,有父级和子级导航图。
在处理登录屏幕时,我正在尝试找出更好的方法 - 要么执行导航 "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 将被视为顶级目标,工具栏上不会有后退按钮。
解决后退按钮问题的另一种选择是我的做法NavHostFragment
,一个是全屏主屏幕,另一个包含在主页片段中(底部导航栏上方)。
当我想导航到全屏视图时,我调用了这个扩展函数,
fun Fragment.findMainNavController(): NavController =
Navigation.findNavController(activity!!, R.id.nav_host_fragment)
然后通过主图导航。
这对我来说在概念上是有意义的,有父级和子级导航图。