具有高级导航示例的注册流程

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 的注册流程中引入了单独的导航图,并且在默认选择的片段中引入了上述代码

通过执行以下操作解决了问题。

  1. login_nav_graph 添加到包含默认选定片段的导航图中作为嵌套导航图。
  2. 从默认选择的片段 (frag1Fragment) 到 login_nav_graph 创建一个 action/path 并将操作的 Pop To 行为设置为 frag1Fragment的导航图。

  3. 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()
        }
}
  1. 更新frag1FragmentonViewCreated方法如下

...

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)
    }
}