同步发表于 http://avenwu.net/viewinject/2015/01/28/android_onclick/

相信大家都知道在layout里面可以给view写android:onClick属性,有没有好奇过它的内部是怎么实现的?

前言

在用android:onClick的时候会有一些有意思的事情:

比如说一般情况所在layout只能是Activity的,也就是说如果有一个Fragment对应的layout.xml,如果你在xml里写了android:onClick=“myClick”,同时在Fragment内实现public void myClick(View view),是会报错的。这是因为必须在Activity中声明该方法。

源码分析

找到android.view.View,可以发现这么一段代码:

代码比较好理解,首先解析出android:onClick的值,即获取方法名,然后通过反射,获取到Activity中对应的方法,并执行,如果找不对应方法则抛出异常。

  • 为什么是Activity?
    getContext().getClass()实际上view中的context都是其所在的Activity实例,那getClass之后当然就是在Activity中找

  • 有什么用?
    通过反射来访问方法其实是比较常见的,如果我们适当的加以利用那么也可以实现一定程度的代码配置,比如EventBus,中也有基于onEventXXX的方法声明约定,猜想也是利用这种方式实现的。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android(安卓)AsyncTask
  5. Android(安卓)SDK23以上(包括23)无法使用httpclient的处理方法
  6. [Android(安卓)Studio / NDK] 如何使用javah生成.h文件
  7. android 属性android:visibility及 view的setVisibility方法值的
  8. android MultiDex multiDex原理(一)
  9. Android中自定义SeekBar来控制音量,并与系统音量键的操作保持同步

随机推荐

  1. Android之布局属性归纳
  2. Android Framework(I)Android Spring Jso
  3. Android中layout属性大全
  4. android总结
  5. Android 自学杂记
  6. Android Studio中快速替换styles的正则表
  7. Android 网络编程 目录
  8. Android常用UI界面设计及国际化
  9. Android输入系统(三):加载按键映射
  10. Android:(10)如何安装卸载的应用程序解析