gpt4 book ai didi

android - 与抽屉导航一起使用时,工具栏后退按钮不起作用

转载 作者:行者123 更新时间:2023-11-29 18:31:08 26 4
gpt4 key购买 nike

下面是代码

我已经使用 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()
}

当从顶级 fragment 移动到其他 fragment 时,会显示后退箭头,但单击它会打开抽屉本身。单击系统后退按钮时,它工作正常。

list

<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() 也有轻微的变化,因为在我之前的代码中,即使我们位于堆栈中的最后一个 fragment ,它也不会关闭应用程序

关于android - 与抽屉导航一起使用时,工具栏后退按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com