使用工具栏中的按钮在片段之间导航

Posted

技术标签:

【中文标题】使用工具栏中的按钮在片段之间导航【英文标题】:Navigate between fragments using button in toolbar 【发布时间】:2021-02-22 06:35:00 【问题描述】:

在我的应用程序中,我希望将创建新记录的过程分为几个步骤,在这些步骤中向用户询问不同的信息。因此,我使用NavHostFragment 创建了一个活动,并希望通过此活动工具栏中的next 按钮使用导航图在片段之间切换。

是否可以将按钮配置为基于导航图在片段之间导航?这是一个好方法吗?我应该为每个步骤使用一个新活动吗?我是 android 开发新手,所以我不确定最好的方法是什么。

【问题讨论】:

【参考方案1】:

您可以使用导航图处理它

    处理片段中的工具栏点击事件:

    https://***.com/a/30077965/11982611

    在处理每个片段的下一个按钮点击事件时,实现您的导航代码

    findNavController().navigate(Your action)
    

    在 Activity 的 OnItemOpotionsSelected 监听器中处理所有导航过程

    override fun onOptionsItemSelected(item: MenuItem): Boolean 
    
    val navHostFragment = supportFragmentManager.primaryNavigationFragment
    val fragment = navHostFragment?.childFragmentManager?.fragments?.get(0)
    
    when(item.itemId)
    
        android.R.id.home->super.onBackPressed()
        R.id.next-> 
             if(fragment is Fragment1)
             
                fragment.findNavController().navigate(Fragment1toFragmen2 action)
    
             if(fragment is Fragment2)
             
                fragment.findNavController().navigate(Fragment2toFragmen3 action)
        
    
        return true
    
    

【讨论】:

谢谢,我尝试使用onOptionsItemSelected 方法处理我的活动中的导航,它完全符合我的要求。但是,当我从 Fragment2 移回 Fragment1 时,我的操作栏中的后退按钮会消失,并且仅对 Fragment1 不再可见。你知道为什么吗?我用setDisplayHomeAsUpEnabled(true)将它设置在我的活动中。 是因为导航组件backstack问题。你需要重写 onBackPressed 方法来实现你想要的。

以上是关于使用工具栏中的按钮在片段之间导航的主要内容,如果未能解决你的问题,请参考以下文章

从android中的片段管理工具栏的导航和后退按钮

Jetpack导航。改变每个片段的工具栏按钮

使用导航从工具栏菜单项单击在片段之间传递数据 - Kotlin

在片段的工具栏中向上导航

如何从 MenuItem 导航到片段(Android)?

导航抽屉的片段管理