与导航抽屉一起使用时,工具栏的“后退"按钮不起作用 [英] Toolbars Back button not working when using with navigation drawer
问题描述
下面是代码
我已经使用AppbarConfiguraion定义了所有顶级目的地.
I have defined all my top level destinations with AppbarConfiguraion.
class MainActivity : DaggerAppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
lateinit var navController: NavController
lateinit var binding: MainActivityBinding
lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
navController = findNavController(R.id.navigation)
setSupportActionBar(binding.toolbar)
supportActionBar!!.setDisplayShowHomeEnabled(true)
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.homeFragment,
R.id.bulletinsFragment,
R.id.serviceFragment,
R.id.paymentsFragment,
R.id.feedBackFragment,
R.id.formsFragment,
R.id.surveysFragment
),
drawer_layout)
setupActionBarWithNavController(
this, navController, appBarConfiguration
)
val toggle = ActionBarDrawerToggle(
this,
drawer_layout,
binding.toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
sideNV.setNavigationItemSelectedListener(this)
}
override fun onBackPressed() {
if ((drawer_layout as DrawerLayout).isDrawerOpen(GravityCompat.START)) {
(drawer_layout as DrawerLayout).closeDrawer(GravityCompat.START)
} else {
findNavController(R.id.navigation).navigateUp()
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.nav_home, R.id.nav_service, R.id.nav_payments, R.id.nav_forms, R.id.nav_bulletins,
R.id.nav_surveys, R.id.nav_feedbacks -> {
navController.navigate(item.itemId)
}
}
(drawer_layout as DrawerLayout).closeDrawer(GravityCompat.START)
return true
}
override fun onSupportNavigateUp() = findNavController(R.id.navigation).navigateUp()
}
从顶层碎片移动到其他碎片时,会显示后退箭头,但单击时会打开抽屉本身.单击系统的后退按钮时,它工作正常.
When moving from the top level fragments to other fragments the back arrow is shown but when on clicking it opens the drawer itself. When on clicking the system back button it's working fine.
清单
<activity
android:name=".home.MainActivity"
android:label="@string/app_name"
android:parentActivityName=".home.MainActivity"
android:theme="@style/AppTheme.NoActionBar">
</activity>
推荐答案
class MainActivity : DaggerAppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
lateinit var navController: NavController
lateinit var binding: MainActivityBinding
lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
navController = findNavController(R.id.navigation)
setSupportActionBar(binding.toolbar)
supportActionBar!!.setDisplayShowHomeEnabled(true)
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.homeFragment,
R.id.bulletinsFragment,
R.id.serviceFragment,
R.id.paymentsFragment,
R.id.feedBackFragment,
R.id.formsFragment,
R.id.surveysFragment
),
drawer_layout
)
setupActionBarWithNavController(
this, navController, appBarConfiguration
)
val toggle = ActionBarDrawerToggle(
this,
drawer_layout,
binding.toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
sideNV.setNavigationItemSelectedListener(this)
toolbar?.setNavigationOnClickListener {
findNavController(R.id.navigation).navigateUp(appBarConfiguration)
}
}
override fun onBackPressed() {
if ((drawer_layout as DrawerLayout).isDrawerOpen(GravityCompat.START)) {
(drawer_layout as DrawerLayout).closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.nav_home, R.id.nav_service, R.id.nav_payments, R.id.nav_forms, R.id.nav_bulletins,
R.id.nav_surveys, R.id.nav_feedbacks -> {
navController.navigate(item.itemId)
}
}
(drawer_layout as DrawerLayout).closeDrawer(GravityCompat.START)
return true
}
override fun onSupportNavigateUp() = findNavController(R.id.navigation).navigateUp()
}
我刚刚更改了代码,并添加了工具栏NavigationOnClickListener,并且在该侦听器中添加了 navigateUp(appBarConfiguration).此外, onBackPressed()在我之前的代码中,即使我们位于堆栈中的最后一个片段,它也不会关闭应用程序
i just changed my code and added toolbar NavigationOnClickListener and in that listener i just added navigateUp(appBarConfiguration).Also there is a slight change in the onBackPressed() as in my previous code it will not close the app even if we are at the last fragment in the stack
这篇关于与导航抽屉一起使用时,工具栏的“后退"按钮不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!