同步发表于 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的方法声明约定,猜想也是利用这种方式实现的。

android:onClick都做了什么的更多相关文章

  1. 每个Android开发者都应该了解的资源列表

    前言   这是一篇译文,原文地址Resources every Android developer must know,在译文开头,推荐两篇同样适合于Android开发者阅读的资源列表Android开 ...

  2. android 开发如何做内存优化

    不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露.其实如果我 们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造 ...

  3. Xamarin android使用Sqlite做本地存储数据库

    android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...

  4. android:onClick="xxx"

    一般监听OnClickListener事件,我们都是通过Button button = (Button)findViewById(....); button.setOClickLisener....这 ...

  5. Android中可以做的两件坏事——破解锁屏密码和获取Wifi密码

    来源:http://blog.csdn.net/jiangwei0910410003/article/details/41800409 今天咋们来看一下我在现实中遇到的两个问题和解决方案 问题一:忘记 ...

  6. Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码

    之前的文章一直在介绍OC,最近也是在找急忙慌的学习IOS,所以Android方面的知识分享就有点中断了,但是我现在还是要靠Android吃饭,所以不能Android的工作不能停呀,今天咋们来看一下我在 ...

  7. 使用属性android:onClick,出现异常NoSuchMethodException

    在Activity中注册点击事件有两种方式,setOnClickListener或在xml中设置控件的android:onClick="gotoSecond"属性,在Activit ...

  8. android:onClick vs setOnClickListener

    为Android Widgets添加点击事件处理函数又两种方法,一个是在Xml文件中添加onClick属性,然后在代码中添加对应的函数.另一个是直接在代码中添加setOnClickListener函数 ...

  9. android onclick onLongClick ontouch dispatchTouchEvent onInterceptTouchEvent

    android onclick onLongClick ontouch dispatchTouchEvent onInterceptTouchEvent 按ACTION_DOWN -> onLo ...

随机推荐

  1. 探秘Tomcat(一)

    前言:有的时候自己不知道自己是井底之蛙,这并没有什么可怕的,因为你只要蜷缩在方寸之间的井里,无数次的生活轨迹无非最终归结还是一个圆形:但是可怕的是有一天你不得不从井里跳出来生活,需要重新审视井以外的生 ...

  2. dns 安全

    域名系统组织架构 DNS是全球互联网中最重要的基础服务之一,也是如今唯一的一种有中心点的服务.全球域名系统组织与管理架构如下图所示: ICANN  互联网名称与数字地址分配机构(The Interne ...

  3. [CF98E]Help Shrek and Donkey(纳什均衡)

    https://www.cnblogs.com/MashiroSky/p/6576398.html #include<cstdio> #include<algorithm> # ...

  4. (转)理解classloader

    ClassLoader翻译过来就是类加载器,普通的Java开发者其实用到的不多,但对于某些框架开发者来说却非常常见.理解ClassLoader的加载机制,也有利于我们编写出更高效的代码.ClassLo ...

  5. 以为是tomcat出现using问题,怎么改都改不好终于找到原因

    我也是醉了被自己打败了,以上问题困扰我半天是时间,百度好久都没有解决.应该打开tomcat的bin下的starup.bat结果打开了tomcat-src中的了,怪不得死活出现不了startup

  6. memcache bug

    用memcached有时会报错  the lowest two bytes of the flags array is reserved for pecl/memcache 将以前的 $mc-> ...

  7. c# 上传图片流,php端(laravel框架)接收处理方法

    c# httppost方法 public struct PostFile { public string name; public string filename; public Stream bit ...

  8. Spring 3.1 M1: Unified Property Management(转)

    In the first two posts of this series, I described the bean definition profiles feature, and how it ...

  9. 学习Spring-Session+Redis实现session共享

    1.添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId& ...

  10. Java 之外,是 Scala 还是 Groovy?【转载】

    原文地址 Scala 和 Groovy 都是基于 JVM 的语言,相比 Java,它们都有语法更加简明和表达能力更丰富.对于那些既想不脱离开 JVM 又想避免 Java 繁琐语句的开发人员来说,Sca ...