Как предотвратить дублирование нажатия кнопки в Android Compose?

Допустим, вы вызываете API регистрации при нажатии кнопки.

Получите ответ API и перейдите на главный экран.

В этом случае API вызывается несколько раз при многократном быстром нажатии кнопки.

Я решил эту проблему в некоторой степени, используя Rxjava, прежде чем использовать compose.

Как композиция может решить эту проблему?

1 ответ

Вообще говоря, в этом нет необходимости, так как Compose нормально обрабатывает нажатия кнопок и предотвращает многократные нажатия. Но если вы используете какую-то пользовательскую кнопку и по какой-то причине получаете несколько кликов, есть ряд решений. Однако вы должны отключать свою кнопку всякий раз, когда вызывается API, и повторно включать ее только после завершения API.

Вы можете использовать дебаунсер кликов. Это эквивалентно использованию rxJava, но вместо этого использует поток Kotlin и имеет встроенный метод устранения дребезга:

Как отключить одновременные клики по нескольким элементам в Jetpack Compose List/Column/Row (дебаунс из коробки?)

или вы можете просто использовать переменную, которая действует как флаг, чтобы указать, что вызов API уже выполняется. Если во время вызова API происходят какие-либо дополнительные клики, они будут игнорироваться, пока установлен флаг. После завершения вызова API просто сбросьте флаг:

      class MyViewModel: ViewModel() {
   private apiInUse = false

   fun someApiCall() {
      if (apiInUse) {
         return
      }

      // Make your api call
      apiInUse = true
      myApi()
      apiInUse = false
   }
}
Другие вопросы по тегам