下面是代码
我已经使用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()
}
从顶层碎片移动到其他碎片时,会显示后退箭头,但单击时会打开抽屉本身。单击系统后退按钮时,它工作正常。
表现
<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,并在该侦听器中添加了navigationUp(appBarConfiguration)。onBackPressed()略有变化,因为在我之前的代码中,即使我们最后一次也不会关闭应用程序堆栈中的片段
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句