问题一
现象
mSearchView 调用clearfocus函数,setOnQueryTextFocusChangeListener监听未响应
原因
当我们调用setOnQueryTextFocusChangeListener
函数的时候,最终是给mOnQueryTextFocusChangeListener
变量。
而这个变量是在什么时候使用的呢?
我们查看源码发现:
// Inform any listener of focus changes
mSearchSrcTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (mOnQueryTextFocusChangeListener != null) {
mOnQueryTextFocusChangeListener.onFocusChange(SearchView.this, hasFocus);
}
}
});
mOnQueryTextFocusChangeListener
是给mSearchSrcTextView
使用的,因此我们需要mSearchSrcTextView 的clearFocus,而不是mSearchView的clearFocus。
解决办法
知道原因后,我们只要获取mSearchView中mSearchSrcTextView就行。
int id = mSearchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
mSearchSrcTextView = (EditText) mSearchView.findViewById(id);
mSearchSrcTextView.clearFocus();