如何使向上按钮返回而不是打开导航抽屉

Posted

技术标签:

【中文标题】如何使向上按钮返回而不是打开导航抽屉【英文标题】:How to make Up Button go back instead of opening Navigation Drawer 【发布时间】:2020-05-18 16:46:52 【问题描述】:

我在我的应用程序中成功实现了一个导航抽屉,将菜单的每个项目链接到一个片段。目标片段隐藏了 DrawerToggle 并显示了向上按钮(即箭头图标),但无论出于何种原因,如果我单击它,它会打开抽屉并且我无法返回上一个片段。我必须按下后退按钮才能做到这一点。我怎样才能改变这种行为?是否可以在不在每个片段中添加代码的情况下解决这个问题?

我用什么:

导航组件 一个活动,一些片段 工具栏 AppBar 配置

MainActivity

class MainActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Setup FTUE conditional navigation
        setupNavigation()

        setupNavigationDrawer()

        appBarConfiguration =
            AppBarConfiguration(
                setOf(R.id.overviewFragment, R.id.registrationFragment,
                       R.id.registrationParamFragment), drawerLayout)
        setupActionBarWithNavController(navController, appBarConfiguration)
        findViewById<NavigationView>(R.id.nav_view)
            .setupWithNavController(navController)
    

    /**
     * Set the toolbar, set the drawerLayout, set the drawerToggle
     */
    private fun setupNavigationDrawer() 
        toolbar = findViewById(R.id.toolbar)

        setSupportActionBar(toolbar)

        drawerLayout = (findViewById<DrawerLayout>(R.id.drawer_layout))
            .apply 
                setStatusBarBackground(R.color.colorPrimaryDark)
            
        drawerToggle = ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close)
        drawerToggle.setDrawerIndicatorEnabled(true)
        drawerToggle.syncState()

        drawerLayout.addDrawerListener(drawerToggle)

    

    override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) 
        super.onPostCreate(savedInstanceState, persistentState)
        drawerToggle.syncState()
    

    /**
     * Ensures that the drawer is closed
     * before the app switches back to the previous fragment
     */
    override fun onBackPressed() 
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) 
            drawerLayout.closeDrawer(GravityCompat.START)
         else 
            super.onBackPressed()
        
    

完整存储库:Github

【问题讨论】:

repo 的链接已损坏 你找到答案了吗? 【参考方案1】:

您需要使用导航控制器设置工具栏:

toolbar.setupWithNavController(findNavController(R.id.nav_host_fragment),findViewById(R.id.full_drawer_layout))

有更多关于这个here的信息。

【讨论】:

【参考方案2】:

为什么不使用继承?创建MonitorCardiacoActivity,它有这个代码并且你使用的每个Activity都应该继承MonitorCardiacoActivity。

【讨论】:

以上是关于如何使向上按钮返回而不是打开导航抽屉的主要内容,如果未能解决你的问题,请参考以下文章

禁用导航抽屉,在片段中切换主页按钮/向上指示器

当按下后退按钮并打开导航抽屉时,我的应用程序关闭而不是关闭抽屉

在操作栏上按“向上导航按钮”并返回到父活动时出错

Android Navigation Drawer Show Up Indicator for Lower Level Fragments

单击按钮时如何使HTML页面一直向上滚动? [复制]

单击按钮时如何使HTML页面一直向上滚动? [复制]