2015-10-17 1 views
11

Я смотрел сгенерированный код ButterKnife и заметил, что для комментариев @OnClick используется DebouncingOnClickListener, реализованный библиотекой.Почему ButterKnife использует метод DebouncingOnClickListener для методов @OnClick?

Что DebouncingOnClickListener делает это, чтобы избежать более одного клика на любой элемент с помощью этого слушателя на одном кадре (для достижения этой цели они используют статический флаг). Вы можете увидеть реализацию here.

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

Итак, почему они используют это? Почему они решили, что каждый пользователь ButterKnife нуждается в этом? Не должен быть пользователь, который решает использовать это или нет? Зачем нужна поддержка привязки вида, предоставляемая этой функцией? Что произойдет, если я хочу получить более одного щелчка на одном фрейме? Я не мог использовать ButterKnife для событий click.

Я не притворяюсь оскорбительным, просто хочу объяснений, может быть, я чего-то не хватает.

+0

Это библиотека с открытым исходным кодом. Если это вас сильно беспокоит, я уверен, что запросы на получение заявок будут приветствоваться. Если нет, вы всегда можете разветвить его. – GreyBeardedGeek

ответ

5

Почему они решили, что каждый пользователь это нужно нож для масла?

Предположим, что у вас есть кнопка и событие click на этой кнопке запускает новое действие. Теперь, что произойдет, когда пользователь очень быстро удвоит кнопку? Есть вероятность, что прослушиватель кликов будет запущен два раза, поэтому будут запущены 2 действия, которых вы, возможно, не хотите.

Что это такое DebouncingOnClickListener, он уверяет, что последующий прослушиватель кликов не будет рассматриваться. Как только произойдет первый клик, последующие клики будут проигнорированы до следующего кадра, когда они будут включен.

Когда вы выполняете действие с видом, вы публикуете событие на MessageQueue. Теперь, когда первый клик происходит, вы публикуете событие - запускаете новую активность. И вы немедленно отправляете другое событие - включите прослушиватель кликов в следующем кадре. Второе событие гарантировано произойдет после первого, поскольку в очереди было post() ed.

Что произойдет, если я хочу получить более одного щелчка на одном кадре?

Если это приемлемо для вас, чтобы получить несколько последующих события щелчка, чем вы должны использовать @OnTouch, потому что вы заинтересованы в сенсорном событии и не в событиях щелчка.


Слушайте осветления @Piwai «s по делу в Fragmented Podcast #88 (начиная с 38:20).

+0

По умолчанию onClickListner должен быть реализован таким образом. Позор Google – user1209216

0

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

эпизод

Этот подкаст охватывает это очень хорошо Fragmented 088

+0

Что значит «события касания асинхронны»? Любой пример? – azizbekian

+0

Это означает, что событие касания обрабатывается от основного, что. Таким образом, вы не гарантируете, что порядок вещей будет обработан в – easycheese

+0

. Я сомневаюсь, что у вас есть законный момент. – azizbekian

Смежные вопросы