2015-01-14 5 views
2

Из справочных документов,Android SearchView: В чем разница между setOnFocusChangeListener() и setOnQueryTextFocusChangeListener?

SearchView.setOnQueryTextFocusChangeListener - Устанавливает слушателя, чтобы сообщить, когда изменяется фокус текстового поля запроса.

и

View.setOnFocusChangeListener - Регистрация обратного вызова будет вызываться, когда фокус этой точки зрения изменилась.

Итак, в случае SearchView в чем разница между этими двумя? Почему они должны были предоставить setOnQueryTextFocusChangeListener, когда SearchView уже наследует setOnFocusChangedListener от View класс?

ответ

2

Если вы заглянете внутрь source code для SearchView, то вы заметите, что технически нет никакой разницы в рабочем поведении этих двух альтернатив. Часть кода, который предоставляет интерфейс слушателей:

// Inform any listener of focus changes 
mQueryTextView.setOnFocusChangeListener(new OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (mOnQueryTextFocusChangeListener != null) { 
      mOnQueryTextFocusChangeListener.onFocusChange(SearchView.this, hasFocus); 
     } 
    } 
}); 

Причина заключается в том, что SearchView является ViewGroup, который служит для запроса текста, и делая его более неизбежным, отдельный метод с очень специфическим названием обеспечивается, что просто прокси к существующему setOnFocusChangeListener методу AutoCompleteTextView внутри.