У меня есть собственный EditText
, где я переопределяю onSelectionChange
, чтобы уведомлять наблюдателей об изменении позиции курсора. Существует небольшая задержка, чтобы предотвратить слишком частое уведомление при быстром изменении выбора ( противодавление ).
private static final long POST_SELECTION_CHANGED_DELAY = 500;
private Runnable mSelectionRunnable = new Runnable() {
@Override
public void run() {
if (mSelectionListener != null) {
mSelectionListener.onSelectionChanged();
}
}
};
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
postSelectionChanged();
}
private void postSelectionChanged() {
removeCallbacks(mSelectionRunnable);
postDelayed(mSelectionRunnable, POST_SELECTION_CHANGED_DELAY);
}
Проблема в том, что во время фазы EditText
инициализации onSelectionChanged
возникает на хотя бы один раз, и это уведомит моих наблюдателей, даже если это еще не нужно. Я попытался подключить слушателей после задержки в 1 секунду, но мне это кажется хакерским.
Итак, есть ли способ узнать, когда инициализация EditText
завершилась, чтобы я мог прикрепить туда своих слушателей? Я уже пробовал onAttachedToWindow
, но еще рано.