android - 如何使向上按钮返回而不是打开导航抽屉
问题描述
我在我的应用程序中成功实现了一个导航抽屉,将菜单的每个项目链接到一个片段。目标片段隐藏了 DrawerToggle 并显示了向上按钮(即箭头图标),但无论出于何种原因,如果我单击它,它就会打开抽屉并且我无法返回到上一个片段。我必须按下后退按钮才能做到这一点。我怎样才能改变这种行为?是否可以在不在每个片段中添加代码的情况下解决这个问题?
我用什么:
- 导航组件
- 一项活动,一些片段
- 工具栏
- 应用栏配置
主要活动
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
解决方案
您需要使用导航控制器设置工具栏:
toolbar.setupWithNavController(findNavController(R.id.nav_host_fragment),findViewById(R.id.full_drawer_layout))
这里有更多关于这方面的信息。
推荐阅读
- asp.net-mvc - 如何自定义asp.net MVC的创建模板视图?
- php - “遇到格式不正确的数值”
- c# - 如何在新线程中的新命令窗口中运行方法?
- visual-studio - 在相关工作项中默认添加工作项 id
- excel - 将 2 个 CSV 文件和输出差异与 CSV 或 Excel 文件进行比较
- c# - 选择具有特定数量的嵌套文档的文档
- java - 推送后如何获取孩子的数据?
- apache - 如果 URI 不匹配,Apache mod_rewrite 重写
- image - MATALB Kinnect 传感器深度图像(太暗)
- .net - BackgroundWorker 未运行