in my situation, I used the look of the buttons and it took clicks too quickly. just turn off clickable and turn it back on after a few seconds ...
Essentially, I created a wrapper class that wraps your onClickListener views. You can also set a custom delay if you want.
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); }
and to call it just do this:
mMyButton.setOnClickListener(new OnClickRateLimitedDecoratedListener(new View.OnClickListener() { @Override public void onClick(View v) { doSomething(); } }));
or specify your own delay:
mMyButton.setOnClickListener(new OnClickRateLimitedDecoratedListener(new View.OnClickListener() { @Override public void onClick(View v) { doSomething(); } },1000));
UPDATE: The above is a bit old-fashioned now that RxJava is so common. as others have already mentioned, in Android we could use a throttle to slow clicks. here is one example:
RxView.clicks(myButton) .throttleFirst(2000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread()) .subscribe { Log.d("i got delayed clicked") } }
You can use this library for this: implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
j2emanue Mar 16 '17 at 18:45 2017-03-16 18:45
source share