Android SearchView:setOnFocusChangeListener() 和 setOnQueryTextFocusChangeListener 有什么区别?
Android SearchView: What is the difference between setOnFocusChangeListener() and setOnQueryTextFocusChangeListener?
来自参考文档,
SearchView.setOnQueryTextFocusChangeListener - 设置一个侦听器以在查询文本字段的焦点发生变化时发出通知。
和
View.setOnFocusChangeListener - 注册一个回调,当这个视图的焦点改变时调用。
那么,在 SearchView
的情况下,两者之间有什么区别?当 SearchView
已经从 View
class 继承了 setOnFocusChangedListener
时,为什么他们需要提供 setOnQueryTextFocusChangeListener
?
如果您查看 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
用于查询文本的目的,并且通过使其更接近,提供了一个具有非常具体名称的单独方法,它只是代理到AutoCompleteTextView
里面现有的setOnFocusChangeListener
方法。
来自参考文档,
SearchView.setOnQueryTextFocusChangeListener - 设置一个侦听器以在查询文本字段的焦点发生变化时发出通知。
和
View.setOnFocusChangeListener - 注册一个回调,当这个视图的焦点改变时调用。
那么,在 SearchView
的情况下,两者之间有什么区别?当 SearchView
已经从 View
class 继承了 setOnFocusChangedListener
时,为什么他们需要提供 setOnQueryTextFocusChangeListener
?
如果您查看 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
用于查询文本的目的,并且通过使其更接近,提供了一个具有非常具体名称的单独方法,它只是代理到AutoCompleteTextView
里面现有的setOnFocusChangeListener
方法。