Android的ListView源码中有三种onKey事件:onKeyDown、onKeyUp、onKeyMultiple,它们均通过commonKey方法处理。

commonKey方法中,又只对ACTION_DOWN覆写了本地处理,也即只对onKeyDown进行了额外处理。另外两个通过向上提交到父类的onKey方法中处理。

 

对于ListView,onKey事件调用路径按按键类型划分如下:

ACTION_DOWN:

KEYCODE_DPAD_CENTERKEYCODE_ENTERKEYCODE_SPACE

onKeyDown(ListView.java)  -> commonKey(ListView.java)

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

更多相关文章

  1. Android从0到完整项目(1)使用Android(安卓)studio 创建项目详解
  2. Android(安卓)4.0新增Space及GridLayout初谈
  3. Android(安卓)SwipeRefreshLayout 下拉刷新——Hi_博客 Android(
  4. android的Activity之间的数据传递
  5. 美团外卖Android(安卓)Lint代码检查实践
  6. 老项目代码从Eclipse迁移到AndroidStudio
  7. Android(安卓)客户端性能优化(魅族资深工程师毫无保留奉献)
  8. android中显示网络图片
  9. android入门:zxing学习笔记(一)

随机推荐

  1. android总结整理----Sqlite
  2. 布局概述之相对布局RelativeLayout
  3. Android 8.0目录介绍
  4. #Android源代码#android:onClick属性的底
  5. Android(安卓)AIDL实现跨进程Activity与S
  6. SmartImageView初接触
  7. Android实现退出时关闭所有Activity的方
  8. Android(安卓)9.0 Launcher启动详解
  9. Android - 多线程 - AsyncTask
  10. 详解Android TextView属性ellipsize多行