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

亚伯拉罕·马修(Abraham Mathew)

下面是代码

我已经使用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>
亚伯拉罕·马修(Abraham Mathew)
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

工具栏幻灯片动画中的后退箭头不起作用

将工具栏与片段一起使用

操作栏后退按钮不起作用

NavigationDrawerFragment无法与AppCompat工具栏一起使用

Appcompat工具栏不与导航抽屉一起显示

导航工具栏中的jqGrid添加按钮不起作用

工具栏.setNavigationOnClickListener不起作用

将windowTranslucentStatus与隐藏的工具栏一起使用

工具栏中的后退按钮不起作用

在Android中使用工具栏实施正确的后退导航和主页按钮处理

Android体系结构组件导航:工具栏后退按钮丢失,后退不起作用

抽屉布局中菜单项工具栏上的后退操作按钮不起作用

InputAccessoryView的子视图工具栏按钮不起作用

将底部菜单栏与导航体系结构组件一起使用时,如何从工具栏中删除后退按钮

将Android导航组件与片段内的单个活动,布局抽屉和工具栏一起使用

与ThrowsA一起使用时,TypeMatcher不起作用

与AppBarLayout和折叠式工具栏一起使用时,ViewPager2的尺寸错误

将主工具栏与Mono一起使用

为什么tintColor在iOS7的导航栏或工具栏上不起作用

向导航栏添加后退按钮不起作用

Android API 23(Android 6.0)工具栏实现导致后退按钮不起作用

工具栏NavigationOnClick不起作用

工具栏未与导航抽屉一起显示。不在 android studio 或设备中

let 与 -XRankNTypes 一起使用时不起作用

Kotlin 导航 - 后退按钮不起作用

滚动后导航栏工具按钮不起作用

使用导航抽屉时后退/向上箭头不起作用

颤动:如何在将导航器与页面一起使用时处理后退按钮按下

与 Plus/Min 按钮一起使用时,innerHTML 不起作用