具有高级导航示例的注册流程
Signup flow with advanced navigation example
我目前正在使用 navigation advanced example 中的底部导航,如果用户未通过身份验证,我会尝试直接让用户进入注册流程。如果用户未通过身份验证,我会在默认选择的片段中使用以下代码来引导用户注册流程 (login_nav_graph)。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!authenticated){
view.findNavController().navigate(R.id.action_frag1Fragment_to_login_nav_graph)
}
}
不过问题不大
- 当用户处于注册流程时显示后退按钮
- 底部导航显示在注册流程中
这些问题是有道理的,原因:
- 因为注册流程 (
login_nav_graph
) 嵌套在底部导航的第一项(默认选中)导航图中。
- 底部导航在
activity_main
布局上。
那么我怎样才能将注册流程集成到导航高级示例中并通过更好的方法克服上述问题?
注:
代码与导航高级示例非常相似,我在名为 login_nav_graph
的注册流程中引入了单独的导航图,并且在默认选择的片段中引入了上述代码
通过执行以下操作解决了问题。
- 将
login_nav_graph
添加到包含默认选定片段的导航图中作为嵌套导航图。
从默认选择的片段 (frag1Fragment
) 到 login_nav_graph
创建一个 action/path
并将操作的 Pop To
行为设置为 frag1Fragment
的导航图。
在 MainActivity
中创建以下两个方法以切换操作栏和底部导航栏的可见性。
fun toggleBottomNavVisibility(){
if(bottom_nav.visibility == View.VISIBLE){
bottom_nav.visibility = View.GONE
}else{
bottom_nav.visibility = View.VISIBLE
}
}
...
fun toggleActionBarVisibility(){
if(supportActionBar!!.isShowing){
supportActionBar?.hide()
}
else{
supportActionBar?.show()
}
}
- 更新
frag1Fragment
的onViewCreated
方法如下
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!authenticated){
// hide bottom navigation and action bar
val activity = activity as MainActivity
activity.toggleBottomNavVisibility()
activity.toggleActionBarVisibility()
findNavController().navigate(R.id.action_frag1Fragment_to_login_nav_graph)
}
}
我目前正在使用 navigation advanced example 中的底部导航,如果用户未通过身份验证,我会尝试直接让用户进入注册流程。如果用户未通过身份验证,我会在默认选择的片段中使用以下代码来引导用户注册流程 (login_nav_graph)。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!authenticated){
view.findNavController().navigate(R.id.action_frag1Fragment_to_login_nav_graph)
}
}
不过问题不大
- 当用户处于注册流程时显示后退按钮
- 底部导航显示在注册流程中
这些问题是有道理的,原因:
- 因为注册流程 (
login_nav_graph
) 嵌套在底部导航的第一项(默认选中)导航图中。 - 底部导航在
activity_main
布局上。
那么我怎样才能将注册流程集成到导航高级示例中并通过更好的方法克服上述问题?
注:
代码与导航高级示例非常相似,我在名为 login_nav_graph
的注册流程中引入了单独的导航图,并且在默认选择的片段中引入了上述代码
通过执行以下操作解决了问题。
- 将
login_nav_graph
添加到包含默认选定片段的导航图中作为嵌套导航图。 从默认选择的片段 (
frag1Fragment
) 到login_nav_graph
创建一个action/path
并将操作的Pop To
行为设置为frag1Fragment
的导航图。在
MainActivity
中创建以下两个方法以切换操作栏和底部导航栏的可见性。fun toggleBottomNavVisibility(){ if(bottom_nav.visibility == View.VISIBLE){ bottom_nav.visibility = View.GONE }else{ bottom_nav.visibility = View.VISIBLE } }
...
fun toggleActionBarVisibility(){
if(supportActionBar!!.isShowing){
supportActionBar?.hide()
}
else{
supportActionBar?.show()
}
}
- 更新
frag1Fragment
的onViewCreated
方法如下
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!authenticated){
// hide bottom navigation and action bar
val activity = activity as MainActivity
activity.toggleBottomNavVisibility()
activity.toggleActionBarVisibility()
findNavController().navigate(R.id.action_frag1Fragment_to_login_nav_graph)
}
}