Как определить, когда EditText завершил свою инициализацию? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть собственный 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, но еще рано.

1 Ответ

1 голос
/ 16 июня 2020

Может быть, переопределить метод onFocusChanged?

override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {}

Таким образом, вы можете определить, сфокусирован ли EditText, а затем продолжить свой собственный logi c

...