Android Проблема с компонентом навигации «глобальное действие» - PullRequest
0 голосов
/ 11 апреля 2020

В некоторых проектах мы используем компонент архитектуры навигации, в графе навигации мы добавили Фрагмент с глобальным действием, но проблема в том, когда быстро нажимать несколько раз на кнопку, после чего перейти к Фрагмент - Фрагмент открывается несколько раз.

У меня есть несколько вариантов решения этой проблемы:

  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" о глобальном действии, но все же мы видим, как открывается несколько Фрагментов (это решение только решило проблему popBackStack)

  3. Используйте пользовательский навигатор фрагментов, где мы, например, добавляем пользовательский атрибут ' mustBeOnce 'to Destination и в переопределенном методе navigate() мы проверим, есть ли этот пункт назначения уже в нашем backstack.

Может быть, кто может предположить другие решения? ...

1 Ответ

0 голосов
/ 11 апреля 2020

Если вы хотите избежать случайных нажатий, вы должны отключить кнопку после вызова Clicklistener. И после того, как вы вернетесь к предыдущему экрану, вы должны включить кнопку в методе onResume ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...