В некоторых проектах мы используем компонент архитектуры навигации, в графе навигации мы добавили Фрагмент с глобальным действием, но проблема в том, когда быстро нажимать несколько раз на кнопку, после чего перейти к Фрагмент - Фрагмент открывается несколько раз.
У меня есть несколько вариантов решения этой проблемы:
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"
о глобальном действии, но все же мы видим, как открывается несколько Фрагментов (это решение только решило проблему popBackStack)
Используйте пользовательский навигатор фрагментов, где мы, например, добавляем пользовательский атрибут ' mustBeOnce 'to Destination и в переопределенном методе navigate()
мы проверим, есть ли этот пункт назначения уже в нашем backstack.
Может быть, кто может предположить другие решения? ...