Kotlin-处理后退按钮在导航抽屉中单击-Android [英] Kotlin - Handling Back Button Click in Navigation Drawer - Android

查看:371
本文介绍了Kotlin-处理后退按钮在导航抽屉中单击-Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在android中实现了导航抽屉.

I have implemented Navigation Drawer in android.

工作正常.

onBackPressed方法也已实现.

onBackPressed method is also implemented.

工作正常.

现在,我要在导航抽屉的后退按钮"单击上具有相同的onBackPressed()方法的功能. (在导航抽屉中设置了后退"按钮.)

Now, I want same onBackPressed() method's functionality on Back Button click of Navigation Drawer. (Back Button is set in Navigation Drawer.)

我将后退箭头"按钮设置如下:

I have set Back Arrow button as below :

// Set back button
    mFragmentManager.addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener {
        if (mFragmentManager.backStackEntryCount > 0) {
            supportActionBar!!.setDisplayHomeAsUpEnabled(true)
        } else {
            supportActionBar!!.setDisplayHomeAsUpEnabled(false)
            mToggle.syncState()
        }
    })

现在,要单击后退"按钮,我已经实现了以下方法:

Now, to take the click of Back button I have implemented below method :

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        android.R.id.home-> {
            Toast.makeText(this, "Back pressed", Toast.LENGTH_SHORT)
                .show();
            onBackPressed();
        }
    }
    return super.onOptionsItemSelected(item)
}

但是,里面没有显示这个吐司,而是打开了我的导航抽屉.

But, this toast inside is not displaying, instead it just opening my Navigation Drawer.

可能是什么问题?谢谢.

What might be the issue ? Thanks.

下面是打开抽屉的代码,即如下所示:

Below is the code to open Drawer i.e. as below :

mToggle = ActionBarDrawerToggle(
            this,
            mDrawer,
            toolbar,
            R.string.navigation_drawer_open,
            R.string.navigation_drawer_close
        )
        mDrawer.addDrawerListener(mToggle)
        mToggle.syncState()

在这里,只需将ActionBarDrawerToggle设置为Navigation Drawer.因此,当我单击HumberIcon时,抽屉将打开.

Here, just set a ActionBarDrawerToggle to Navigation Drawer. So, Drawer open when I click on HumberIcon.

下面是我的Activity内的onBackPressed()方法:

Below is the onBackPressed() method inside my Activity :

if (mDrawer.isDrawerOpen(GravityCompat.START)) {
            mDrawer.closeDrawer(GravityCompat.START)
        } else {
            if (mFragmentManager.backStackEntryCount > 0) {
                mFragmentManager.popBackStack()
                nav_view.setCheckedItem(R.id.nav_home_fragment)
                
            } else {
                if (mFragmentManager.findFragmentById(R.id.fragment_container) is SecondFragment) {
                    mFragmentManager.popBackStack()
                    nav_view.setCheckedItem(R.id.nav_home_fragment)
                } else {
                    super.onBackPressed()
                }
            }
        }
    }

推荐答案

如果您的工具栏没有问题,则可以使用以下内容返回带有NavComponent的内容.

If your toolbar is OK, you can use the following to go back one with NavComponent.

findNavController().popBackStack()

如果工具栏有问题,请共享相关代码.

If there is a problem with your toolbar, please share the relevant codes.

这篇关于Kotlin-处理后退按钮在导航抽屉中单击-Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆