在某些项目中,我们使用导航体系结构组件,在导航图中,我们添加了带有全局操作的 Fragment ,但是问题是当快速多次单击按钮后导航到 Fragment >-片段会多次打开。
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'添加到Destination,并在覆盖的方法navigate()
中检查此目标是否已在我们的堆栈中。
答案 0 :(得分:0)
如果要避免意外单击,则必须在调用Clicklistener后禁用该按钮。然后,当您返回上一个屏幕后,必须启用onResume()方法中的按钮。