如何使向上按钮返回而不是打开导航抽屉 [英] How to make Up Button go back instead of opening Navigation Drawer

查看:90
本文介绍了如何使向上按钮返回而不是打开导航抽屉的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序中成功实现了导航抽屉,将菜单的每个项目链接到一个片段.目标片段隐藏了DrawerToggle并显示了向上按钮(即箭头图标),但是由于任何原因,如果我单击它,它将打开抽屉,而我无法返回上一个片段.我必须按下后退"按钮来执行此操作.我该如何改变这种行为?是否可以解决此问题而无需在每个片段中添加代码?

I successfully implemented a Navigation Drawer in my app, linking each item of the menu to a fragment. The destination fragment hides the DrawerToggle and displays the up button (i.e. the arrow icon), but for whatever reason, if I click on it, it opens the drawer and I can't go back to the previous fragment. I have to press the back button to do it. How can I change this behaviour? Is it possible to solve this without adding code in every fragment?

我使用的是什么

  • 导航组件
  • 一项活动,一些碎片
  • 工具栏
  • AppBarConfiguration

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

推荐答案

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

You need to set your toolbar up with the nav controller:

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

此处有更多信息.

这篇关于如何使向上按钮返回而不是打开导航抽屉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆