EditTexteditText = findViewById(R.id.ed);
EditTextDebounce.create(editText)
.watch(result -> {
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
}, 1000);publicfinalclassEditTextDebounce {
privatefinalWeakReference<EditText> editTextWeakReference;
privatefinalHandlerdebounceHandler;
privateDebounceCallbackdebounceCallback;
privateRunnabledebounceWorker;
privateintdelayMillis;
privatefinalTextWatchertextWatcher;
publicstaticEditTextDebouncecreate(@NonNullEditTexteditText) {
returnnewEditTextDebounce(editText);
}
publicstaticEditTextDebouncecreate(@NonNullEditTexteditText, intdelayMillis) {
EditTextDebounceeditTextDebounce = newEditTextDebounce(editText);
editTextDebounce.setDelayMillis(delayMillis);
returneditTextDebounce;
}
privateEditTextDebounce(@NonNullEditTexteditText) {
this.debounceHandler = newHandler(Looper.getMainLooper());
this.debounceWorker = newDebounceRunnable("", null);
this.delayMillis = 300;
this.textWatcher = newTextWatcher() {
@OverridepublicvoidbeforeTextChanged(CharSequences, intstart, intcount, intafter) {
//unused
}
@OverridepublicvoidonTextChanged(CharSequences, intstart, intbefore, intcount) {
//unused
}
@OverridepublicvoidafterTextChanged(Editables) {
debounceHandler.removeCallbacks(debounceWorker);
debounceWorker = newDebounceRunnable(s.toString(), debounceCallback);
debounceHandler.postDelayed(debounceWorker, delayMillis);
}
};
this.editTextWeakReference = newWeakReference<>(editText);
EditTexteditTextInternal = this.editTextWeakReference.get();
if (editTextInternal != null) {
editTextInternal.addTextChangedListener(textWatcher);
}
}
publicvoidwatch(@NullableDebounceCallbackdebounceCallback) {
this.debounceCallback = debounceCallback;
}
publicvoidwatch(@NullableDebounceCallbackdebounceCallback, intdelayMillis) {
this.debounceCallback = debounceCallback;
this.delayMillis = delayMillis;
}
publicvoidunwatch() {
if (editTextWeakReference != null) {
EditTexteditText = editTextWeakReference.get();
if (editText != null) {
editText.removeTextChangedListener(textWatcher);
editTextWeakReference.clear();
debounceHandler.removeCallbacks(debounceWorker);
}
}
}
privatevoidsetDelayMillis(intdelayMillis) {
this.delayMillis = delayMillis;
}
privatestaticclassDebounceRunnableimplementsRunnable {
privatefinalStringresult;
privatefinalDebounceCallbackdebounceCallback;
DebounceRunnable(Stringresult, DebounceCallbackdebounceCallback) {
this.result = result;
this.debounceCallback = debounceCallback;
}
@Overridepublicvoidrun() {
if (debounceCallback != null) {
debounceCallback.onFinished(result);
}
}
}
publicinterfaceDebounceCallback {
voidonFinished(@NonNullStringresult);
}
}
Copyright 2022 M. Fadli Zein