Android的ListView源码中有三种onKey事件

来源:互联网 发布:linux开发工程师待遇 编辑:程序博客网 时间:2024/05/23 18:41

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理解,此处从略。

原创粉丝点击