0

在某些项目中,我们使用导航架构组件,在导航图中,我们添加了具有全局操作的片段,但问题是当快速单击按钮多次后导航到片段-片段打开多次。

我有一些选择来解决这个问题:

  1. class SafeClickListener(
                private var defaultIntervalMs: Long = 1000,
                private val onSafeCLick: (View) -> Unit
        ) : View.OnClickListener {
    
                private var lastTimeClicked: Long = 0
    
                override fun onClick(v: View) {
                    if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultIntervalMs) {
                        return
                    }
                    lastTimeClicked = SystemClock.elapsedRealtime()
                    onSafeCLick(v)
                }
        }
    
  2. 在全局动作上使用app:launchSingleTop="true",但我们仍然看到多个Fragments是如何打开的(这个解决方案只解决了 popBackStack 问题)

  3. 使用自定义片段导航器,例如,我们将自定义属性“mustBeOnce”添加到目标,并且在覆盖的方法中navigate(),我们将检查该目标是否已经在我们的后台堆栈中。

谁能想到其他解决方案?...

4

1 回答 1

0

如果您想避免意外点击,则必须在调用 Clicklistener 后禁用该按钮。当您返回上一个屏幕后,您必须启用 onResume() 方法中的按钮。

于 2020-04-11T12:30:19.530 回答