169 похожих чатов

Всем привет. Кто как борется с неоднократным срабатыванием нажатия на

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

21 ответов

12 просмотров

А если setEnabled поставить false?

Роман-Жуков Автор вопроса

Вот я так и делаю. Но каким-то образом, иногда может сработать два раза

Вы ее сразу же дизаблите в обработчике клика, или в конце?

Роман-Жуков Автор вопроса

Сразу же

скорее всего Вы поток главный перегрузили

Роман-Жуков Автор вопроса

Вот тут подобное что-то обсуждается, что Android ставит события в очередь, но рабочего ответа нет. Может, разработчики сталкивались с подобными проблемами и как-то решали их?

Если там убрать остальную бизнес логику, а только запрещать кнопку и выводить в лог нажатие, что получится?

Можно извратиться и сначала проверить на enabled, а потом делать дело только если enabled == true

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

Тоже правильно. Но хорошо бы и UI блокировать.

Роман-Жуков Автор вопроса

Ну, да, скорей всего, не с того конца подошёл. Хотя на первый взгляд кажется, что должно быть решение, как научить кнопку не срабатывать несколько раз подряд

ui асинхронный. Это все можно сделать, но занятие не тривиальное

Я бы попробовал типа if (enabled) { enabled = false // Do stuff }

тоже хороший вариант

Роман-Жуков Автор вопроса

Типо isEnabled использовать, который является параметром кнопки? if (button.isEnabled) { button.isEnabled = false // Do stuff button.isEnabled = true }

Роман-Жуков Автор вопроса

ui асинхронный? по-моему, мне вообще отсюда надо начинать работать, потому что я думал, что синхронный

Да. Только имейте ввиду, что если у вас эта длительная операция идёт в главном потоке, то UI зависнет. Если не в главном, то по окончании работы кнопку нужно разрешать оттуда. Иначе вы ее запрещаете и тут же обратно разрешаете, а работа тем временем в фоне идёт, но кнопку можно в это время нажимать, что неправильно.

сами листенеры - синхронные в ui а их вызовы - асинхронны

Роман-Жуков Автор вопроса

Уффф. Интересно будет где-нибудь забыть поставить isEnabled = true. Где-нибудь при ошибке формирования документа

Ну, блин! В любом случае должен быть сигнал об окончании работы: либо успех, либо ошибка. И желательно всегда в одном месте 😁

Роман-Жуков Автор вопроса

Это точно 😁 Ладно, спасибо, попробую завтра в этом направлении пойти

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Всем привет. Возможно ли выполнить код ahk без интерпритатора? Имея только скомпилированный ехе файл? Например как функция eval
proxy
6
Карта сайта