当前位置: 首页 > 知识库问答 >
问题:

如何弥补按钮返回而不是打开导航抽屉

颜志业
2023-03-14

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

我使用的内容:

  • 导航组件

主要活动

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

共有2个答案

盖玉石
2023-03-14

为什么不利用继承呢?创建包含此代码的MonitorCardiacoActivity,您使用的每个活动都应该继承MonitorCardiacoActivity。

唐炜
2023-03-14

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

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

这里有更多关于这方面的信息。

 类似资料:
  • 我对Android开发相当陌生。我正在检查材料设计库,我已经实现了一个带有底部导航的抽屉菜单,可以轻松浏览片段。两个组件都很好,但我不知道如何协调两个组件的导航。例如,当一个片段在抽屉菜单上切换时,它会改变布局,但按钮导航选定的项目不会随之改变。 如何解决此问题,并将这两个组件链接起来,使其相互工作,并同步更改的选定项? 这是我的java文件的样子,下面是GitHub上整个项目的链接:https:

  • 我使用导航图进行导航,并有一个开始屏幕(启动片段)作为显示的第一个片段。问题是,当我转到主片段/屏幕时,顶部的导航按钮显示回来,而不是抽屉图标。我们如何控制这一切?有哪些选择。如何更改起始目的地?(如有可能) 当用户位于顶级目的地时,如果目的地使用抽屉布局,则导航按钮将成为抽屉图标。如果目的地不使用抽屉布局,则隐藏导航按钮。当用户在任何其他目的地时,导航按钮显示为向上按钮。要仅使用开始目标作为顶级

  • 我有以下问题: 到此: 使用:

  • 我正在开发一个android项目,我正在尝试使用来自http://developer.android.com/training/implementing-navigation/nav-drawer.html.的示例集成新的导航抽屉 它主要工作除了一件事,动作栏向上按钮不显示菜单,但如果我用手指从边缘滑动主活动屏幕,菜单就会出现,所以我知道实际菜单没有问题,它只是动作栏按钮。 下面是代码 感谢您提供

  • 我是一个新的android工作室,所以很抱歉,如果这是一个非常愚蠢的问题,但我不能找到答案在任何地方网上。非常感谢任何帮助! 我已经建立了一个小的应用程序,有两个屏幕:一个主屏幕,一个屏幕二。主屏幕只是导航到屏幕二。从另一个屏幕,你可以播放/暂停/停止一首特定的歌曲,或者回到主屏幕。 我遇到的问题是当我导航到屏幕二时,当我按下“后退”按钮返回主屏幕时,我无法弄清楚如何将“停止”方法添加到这个按钮上

  • 我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra