- CompoundButton 源码分析
- LinearLayout 源码分析
- SearchView 源码解析
- LruCache 源码解析
- ViewDragHelper 源码解析
- BottomSheets 源码解析
- Media Player 源码分析
- NavigationView 源码解析
- Service 源码解析
- Binder 源码分析
- Android 应用 Preference 相关及源码浅析 SharePreferences 篇
- ScrollView 源码解析
- Handler 源码解析
- NestedScrollView 源码解析
- SQLiteOpenHelper/SQLiteDatabase/Cursor 源码解析
- Bundle 源码解析
- LocalBroadcastManager 源码解析
- Toast 源码解析
- TextInputLayout
- LayoutInflater 和 LayoutInflaterCompat 源码解析
- TextView 源码解析
- NestedScrolling 事件机制源码解析
- ViewGroup 源码解析
- StaticLayout 源码分析
- AtomicFile 源码解析
- AtomicFile 源码解析
- Spannable 源码分析
- Notification 之 Android 5.0 实现原理
- CoordinatorLayout 源码分析
- Scroller 源码解析
- SwipeRefreshLayout 源码分析
- FloatingActionButton 源码解析
- AsyncTask 源码分析
- TabLayout 源码解析
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.4 Listener
然后,我们来看看 SearchView
里面有哪些 Listener:
//里面有 2 个方法: //onQueryTextSubmit(String query):当用户提交查询的时候会调用 //onQueryTextChange(String newText):当查询文字改变的时候会调用 private OnQueryTextListener mOnQueryChangeListener; //里面有 1 个方法:boolean onClose(); //onClose():当 mCloseButton 被点击和 setIconified(true) 会判断是否调用 //是否调用是在 onCloseClicked() 里判断,后面会进行分析 private OnCloseListener mOnCloseListener; //View 类里定义的接口 private OnFocusChangeListener mOnQueryTextFocusChangeListener; //里面有 2 个方法: //onSuggestionSelect(int position):选择建议可选项(搜索框下方出现的)后触发 //onSuggestionClick(int position):点击建议可选项后触发 private OnSuggestionListener mOnSuggestionListener; //View 类里定义的接口 private OnClickListener mOnSearchClickListener; //还有其他 mOnClickListener,mTextKeyListener 等
我们看看 OnQueryTextListener 是怎样进行监听的:
- onQueryTextChange(String newText)
//在构造方法里添加了监听 mSearchSrcTextView.addTextChangedListener(mTextWatcher);
然后在 mTextWatcher
的 onTextChanged()
方法里调用了 SearchView 的 onTextChanged(CharSequence newText)
方法, 也就是在这里进行了判断触发:
private void onTextChanged(CharSequence newText) { /** * 省略代码,主要是更新组件 */ //当 listener!=null 和当文本不一样的时候会触发。 if (mOnQueryChangeListener != null && !TextUtils.equals(newText, mOldQueryText)) { mOnQueryChangeListener.onQueryTextChange(newText.toString()); } //省略代码 }
- onQueryTextSubmit(String query)
//同在构造方法里添加了监听 mSearchSrcTextView.setOnEditorActionListener(mOnEditorActionListener); private final OnEditorActionListener mOnEditorActionListener = new OnEditorActionListener() { /** * Called when the input method default action key is pressed. */ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { onSubmitQuery(); return true; } }; private void onSubmitQuery() { CharSequence query = mSearchSrcTextView.getText(); if (query != null && TextUtils.getTrimmedLength(query) > 0) { //当监听 OnQueryChangeListener 了之后, //当 onQueryTextSubmit() return true 的话,是不会执行下面操作的 if (mOnQueryChangeListener == null || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { //设置了 Searchable 后,会 startActivity 到配置指定的 Activity if (mSearchable != null) { launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); } //设置键盘是否显示 setImeVisibility(false); //下拉可选项是用 ListPopupWindow 显示的,具体可看 AutoCompleteTextView 源码 //搜索提交后,dismiss 后就不会继续显示而挡住内容什么的 dismissSuggestions(); } } }
在 if 里加入 !mOnQueryChangeListener.onQueryTextSubmit(query.toString())
,这样做就可以让使用者自己决定是否完全自己处理,灵活性也更高。
其他 Listener 差不多也是这样,那接下来看看其他的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论