在某些项目中,我们使用导航架构组件,在导航图中,我们添加了具有全局操作的片段,但问题是当快速单击按钮多次后导航到片段-片段打开多次。
我有一些选择来解决这个问题:
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) } }
在全局动作上使用
app:launchSingleTop="true"
,但我们仍然看到多个Fragments是如何打开的(这个解决方案只解决了 popBackStack 问题)使用自定义片段导航器,例如,我们将自定义属性“mustBeOnce”添加到目标,并且在覆盖的方法中
navigate()
,我们将检查该目标是否已经在我们的后台堆栈中。