Android中ListView的onKeyDown、onKeyUp、onKeyMultiple事件的处理流程
Android的ListView源码中有三种onKey事件:onKeyDown、onKeyUp、onKeyMultiple,它们均通过commonKey方法处理。
commonKey方法中,又只对ACTION_DOWN覆写了本地处理,也即只对onKeyDown进行了额外处理。另外两个通过向上提交到父类的onKey方法中处理。
对于ListView,onKey事件调用路径按按键类型划分如下:
ACTION_DOWN:
KEYCODE_DPAD_CENTER、KEYCODE_ENTER、KEYCODE_SPACE:
onKeyDown(ListView.java) -> commonKey(ListView.java)
KEYCODE_DPAD_UP、KEYCODE_DPAD_DOWN、KEYCODE_DPAD_LEFT和KEYCODE_DPAD_RIGHT:
onKeyDown(ListView.java) -> commonKey(ListView.java)
KEYCODE_BACK :
onKeyDown(ListView.java) -> commonKey(ListView.java) ->sendToTextFilter(AbsListView.java) -> 根据返回值决定是否调用 onKeyDown(View.java) 【注: onKeyDown(View.java) 中没有对KEYCODE_BACK 的处理代码,因此将简单返回false】
ACTION_UP:
KEYCODE_DPAD_CENTER、KEYCODE_ENTER、KEYCODE_SPACE:
onKeyUp(ListView.java) -> commonKey(ListView.java) -> sendToTextFilter(AbsListView.java) 【注:简单返回false】-> onKeyUp(AbsListView.java) -> onKeyUp(View.java)
KEYCODE_DPAD_UP、KEYCODE_DPAD_DOWN、KEYCODE_DPAD_LEFT和KEYCODE_DPAD_RIGHT:
onKeyUp(ListView.java) -> commonKey(ListView.java) -> sendToTextFilter (AbsListView.java)【注:简单返回false】 -> onKeyUp(AbsListView.java) -> onKeyUp(View.java) 【注: onKeyUp(AbsListView.java) 和onKeyUp(View.java) 中没有对KEYCODE_DPAD_UP、KEYCODE_DPAD_DOWN、KEYCODE_DPAD_LEFT和KEYCODE_DPAD_RIGHT 的处理代码,因此将简单返回false】
KEYCODE_BACK :
onKeyUp(ListView.java) -> commonKey(ListView.java) ->sendToTextFilter(AbsListView.java) -> 根据返回值决定是否调用 onKeyUp(View.java) 【注: onKeyUp(View.java) 中没有对KEYCODE_BACK 的处理代码,因此将简单返回false】
ACTION_MULTIPLE:
ACTION_MULTIPLE是指多个连续的重复事件,可拆开为多个上面的ACTION_DOWN和ACTION_UP理解,此处从略。
更多相关文章
- Android从0到完整项目(1)使用Android(安卓)studio 创建项目详解
- Android(安卓)4.0新增Space及GridLayout初谈
- Android(安卓)SwipeRefreshLayout 下拉刷新——Hi_博客 Android(
- android的Activity之间的数据传递
- 美团外卖Android(安卓)Lint代码检查实践
- 老项目代码从Eclipse迁移到AndroidStudio
- Android(安卓)客户端性能优化(魅族资深工程师毫无保留奉献)
- android中显示网络图片
- android入门:zxing学习笔记(一)