I have a problem with my app that if the user clicks the button multiple times quickly, then multiple events are generated before even my dialog holding the button disappear
Based on @GreyBeardedGeek answer,
debounceClick_last_Timestamp
on ids.xml
to tag
previous click timestamp.Add This block of code into BaseActivity
protected void debounceClick(View clickedView, DebouncedClick callback){
debounceClick(clickedView,1000,callback);
}
protected void debounceClick(View clickedView,long minimumInterval, DebouncedClick callback){
Long previousClickTimestamp = (Long) clickedView.getTag(R.id.debounceClick_last_Timestamp);
long currentTimestamp = SystemClock.uptimeMillis();
clickedView.setTag(R.id.debounceClick_last_Timestamp, currentTimestamp);
if(previousClickTimestamp == null
|| Math.abs(currentTimestamp - previousClickTimestamp) > minimumInterval) {
callback.onClick(clickedView);
}
}
public interface DebouncedClick{
void onClick(View view);
}
Usage:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
debounceClick(v, 3000, new DebouncedClick() {
@Override
public void onClick(View view) {
doStuff(view); // Put your's click logic on doStuff function
}
});
}
});
Using lambda
view.setOnClickListener(v -> debounceClick(v, 3000, this::doStuff));