в моей ситуации я использовал вид кнопок, и он слишком быстро брал клики.просто отключите кликабельный и включите его снова через несколько секунд ...
По сути, я создал класс-обертку, который оборачивает ваши представления onClickListener.Вы также можете установить пользовательскую задержку, если хотите.
public class OnClickRateLimitedDecoratedListener implements View.OnClickListener {
private final static int CLICK_DELAY_DEFAULT = 300;
private View.OnClickListener onClickListener;
private int mClickDelay;
public OnClickRateLimitedDecoratedListener(View.OnClickListener onClickListener) {
this(onClickListener, CLICK_DELAY_DEFAULT);
}
//customize your own delay
public OnClickRateLimitedDecoratedListener(View.OnClickListener onClickListener, int delay) {
this.onClickListener = onClickListener;
mClickDelay = delay;
}
@Override
public void onClick(final View v) {
v.setClickable(false);
onClickListener.onClick(v);
v.postDelayed(new Runnable() {
@Override
public void run() {
v.setClickable(true);
}
}, mClickDelay);
}
}
и позвонить ей просто сделайте это:
mMyButton.setOnClickListener(new OnClickRateLimitedDecoratedListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doSomething();
}
}));
или укажите собственную задержку:
mMyButton.setOnClickListener(new OnClickRateLimitedDecoratedListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doSomething();
}
},1000));
ОБНОВЛЕНИЕ: Сверх того, немного старомодно, когда RxJava настолько распространен.как уже упоминали другие, в Android мы могли бы использовать дроссель, чтобы замедлить щелчки.Вот один пример:
RxView.clicks(myButton)
.throttleFirst(2000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.subscribe {
Log.d("i got delayed clicked")
}
}
вы можете использовать эту библиотеку для него: implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'