Kotlin-在导航抽屉中处理返回按钮点击- Android

xtfmy6hx  于 2023-03-24  发布在  Kotlin
关注(0)|答案(2)|浏览(299)

我在Android中实现了导航抽屉。
工作正常。
onBackPressed方法也被实现。
工作正常。
现在,我希望在导航抽屉的后退按钮单击上使用相同的onBackPressed()方法的功能。(后退按钮在导航抽屉中设置。)
我已将后退箭头按钮设置为如下:

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

现在,采取点击后退按钮,我已经实现了下面的方法:

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)
}

但是,里面的这个吐司并没有显示出来,相反,它只是打开了我的导航抽屉。
有什么问题吗?谢谢。

编辑:

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

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

在这里,只需设置一个ActionBarDrawerToggle到导航抽屉。所以,当我点击HumberIcon时,抽屉打开。
下面是Activity中的onBackPressed()方法:

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()
                }
            }
        }
    }
m1m5dgzv

m1m5dgzv1#

如果您的工具栏正常,您可以使用以下命令返回带有NavComponent的工具栏。

findNavController().popBackStack()

如果您的工具栏有问题,请分享相关代码。

fcwjkofz

fcwjkofz2#

步骤1:在XML设计中,工具栏位于顶部

<androidx.appcompat.widget.Toolbar
            android:id="@+id/myToolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingEnd="@dimen/_5sdp"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

第二步:然后用文本绑定你的顶部工具栏

with(binding) {
            setContentView(root)
            setToolbar("Top Nav Bar").toString().lowercase()
            setToolbar() //<---- call this fun then (for back arrow in top left)
}

//===[ Handle your Top Left Back arrow button ]===
 fun setToolbar() {
        with(binding.appBar) {
            setSupportActionBar(myToolbar)
            supportActionBar?.setDisplayShowTitleEnabled(false)
            myToolbar.navigationIcon = drawableColor(R.drawable.ic_back,R.color.black)
            myToolbar.setNavigationOnClickListener { onBackPressed() }
            myToolbar.setTitleTextColor(Color.BLACK)
        }
    }

那就处理好你的
在按下后()
无论你想重定向到哪里
例如:

override fun onBackPressed() {
            super.onBackPressed()
            launchActivity<MainActivity>()
        }

相关问题