双击 BottomSheetDialog 快速给出两个对话框

Double clicking on BottomSheetDialog quickly gives two dialog

我有一个底部 sheet 对话框片段,我将其用作底部应用栏的菜单。

如果我快速点击菜单图标两次,对话框会出现两次,我不得不关闭它两次,这很烦人。

我的代码如下:

ActivityHome.kt

override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
    android.R.id.home -> {
        if(mBottomNavDrawerFragment != null && mBottomNavDrawerFragment!!.dialog!!.isShowing){
            mBottomNavDrawerFragment?.dismiss()
            return false
        }
        mBottomNavDrawerFragment = RoundedBottomSheetDialogFragment()
        mBottomNavDrawerFragment?.show(supportFragmentManager, mBottomNavDrawerFragment?.tag)
        true
    }
    R.id.BottomAppBar_fromHomeActivity_MenuMain_Search -> {
        Toast.makeText(this, "Not Implemented yet!", Toast.LENGTH_SHORT).show()
        false
    }
    else -> true
}
}

有人可以帮忙吗?谢谢

您可以在这里做一些修改。这是代码。

private var saveClickCounter = 0
override fun onOptionsItemSelected(item: MenuItem?): Boolean {

    return when (item?.itemId) {
        R.id.home -> {
            if (saveClickCounter++ == 0) {

                //Your Dialog Showing Code


                Handler().postDelayed({
                   saveClickCounter=0
                },1000)
            }
            true
        }

        R.id.BottomAppBar_fromHomeActivity_MenuMain_Search -> {
            Toast.makeText(this, "Not Implemented yet!", Toast.LENGTH_SHORT).show()
            false
        }
        else -> true
    }
}
  • 创建一个变量 saveClickCounter 来存储您的计数。
  • 点击增加 saveClickCounter 的值并在延迟 N 秒 后将其更改为零。我在下面的代码中使用了 1 秒。

使用标签显示dialogFragment。在再次显示之前检查标签是否存在于堆栈中

    if(getChildFragmentManager().findFragmentByTag(FragmentDialog.TAG) == null) {
        fragmentDialog.show(getChildFragmentManager(), FragmentDialog.TAG);
    }