android:onClick都做了什么
同步发表于 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都做了什么的更多相关文章
- 每个Android开发者都应该了解的资源列表
前言 这是一篇译文,原文地址Resources every Android developer must know,在译文开头,推荐两篇同样适合于Android开发者阅读的资源列表Android开 ...
- android 开发如何做内存优化
不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露.其实如果我 们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造 ...
- Xamarin android使用Sqlite做本地存储数据库
android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...
- android:onClick="xxx"
一般监听OnClickListener事件,我们都是通过Button button = (Button)findViewById(....); button.setOClickLisener....这 ...
- Android中可以做的两件坏事——破解锁屏密码和获取Wifi密码
来源:http://blog.csdn.net/jiangwei0910410003/article/details/41800409 今天咋们来看一下我在现实中遇到的两个问题和解决方案 问题一:忘记 ...
- Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码
之前的文章一直在介绍OC,最近也是在找急忙慌的学习IOS,所以Android方面的知识分享就有点中断了,但是我现在还是要靠Android吃饭,所以不能Android的工作不能停呀,今天咋们来看一下我在 ...
- 使用属性android:onClick,出现异常NoSuchMethodException
在Activity中注册点击事件有两种方式,setOnClickListener或在xml中设置控件的android:onClick="gotoSecond"属性,在Activit ...
- android:onClick vs setOnClickListener
为Android Widgets添加点击事件处理函数又两种方法,一个是在Xml文件中添加onClick属性,然后在代码中添加对应的函数.另一个是直接在代码中添加setOnClickListener函数 ...
- android onclick onLongClick ontouch dispatchTouchEvent onInterceptTouchEvent
android onclick onLongClick ontouch dispatchTouchEvent onInterceptTouchEvent 按ACTION_DOWN -> onLo ...
随机推荐
- win7查看其它工作组 win7 所有工作组
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha win7 所有工作组 ==== win7 网络 工作组 查找 自身有问题. 多刷新几 ...
- 洛谷.2051.[AHOI2009]中国象棋(DP)
题目链接 /* 每行每列不能超过2个棋子,求方案数 前面行对后面行的影响只有 放了0个.1个.2个 棋子的列数,与排列方式无关 所以设f[i][j][k]表示前i行,放了0个棋子的有j列,放了1个棋子 ...
- [BJOI2014]大融合
Description 给你一个n个点的森林,要求支持m个操作: 1.连接两个点 x,y 2.询问若断掉 x,y这条边,两点所在联通块乘积的大小 Hint: \(n,m<=10^5\) Solu ...
- Android MediaPlayer架构 -- MediaPlayer的创建过程
本文系作者自己学习之所用,文章内容仅出自作者拙劣之思考,问题之处烦请不吝指教. MediaPlayer 能被用来控制音/视频文件或流媒体的回放.Android中以MediaPlayer类作为音视频播放 ...
- 利用VS2008编译器编译Qt4.8.2的MySQL驱动
准备:安装VS2008和Qt 4.8.2,并且设置环境变量(QTDIR=C:\Qt\4.8.2 和 path+=C:\Qt\4.8.2\bin) 一.下载mysql数据库,安装(完全安装)到C盘根目录 ...
- 添加 vip
两台机器:172.16.91.101 172.16.91.107 在91.101上增加虚拟ip,92网段的 ifconfig eth0:1 172.16.92.2 netmask 255.255.25 ...
- yum安装与源码编译安装实际使用区别
总结一些我实际生产使用的区别: 1.yum安装不是说不行,都行,各有千秋. 2.yum安装目录不集中,但基本遵循Linux文件夹的作用去划分文件,比如配置文件通常在/etc下. 3.yum安装说的模块 ...
- Delphi识别读取验证码
unit OCR; interface uses Windows, SysUtils, Graphics, Classes, PNGImage, GIFImage, JPEG, Math, Asphy ...
- 在远程桌面服务中配置RD网关直接访问内网
原文地址:http://wangchunhai.blog.51cto.com/225186/1139388/ 远程桌面网关(RD 网关)是一项角色服务,使授权远程用户可以从任何连接到 Internet ...
- lib32asound2 : Depends: libc6-i386 (>= 2.7) but it is not going to be installed
sudo apt-get install -f sudo dpkg --configure -a sudo apt-get clean sudo apt-get update sudo apt-get ...