Button.setOnClickListener(OnClickListener l) 原理
【转自】http://www.iteye.com/topic/635466
使用Button 可能都会监听之 当其被点击 就会有函数负责回调 那么其到底是怎么实现的呢?
今天要做的就是摸清楚之 为了减少不必要的麻烦 打算extends EditText 并在其上设立监听器
[代码 步骤]
1. 定义Edit2Text 且extends EditText
- public class Edit2Text extends EditText {
- OnTextChangedListener changedListener;
- TextWatcher tWatcher;
- }
2. 定义其上的监听器:OnTextChangedListener 并定义函数:onChanged() 用于执行具体回调
- public static interface OnTextChangedListener {
- public void onChanged(Edit2Text e2t, String text);
- }
- 需要注意的 这几行代码的修饰关键字:
- 1. static :使其能够脱离Edit2Text而存在
- 2. interface : 使其自动填充其内部函数
- 3. “void onChanged(Edit2Text e2t, String text)” 中的第一个参数e2t 用于做分别 具体奥妙 后面再细说
3. 设定监听器
- public void setOnChangedListener(OnTextChangedListener l){
- changedListener = l;
- }
4. 定义TextWatcher 当字符内容改变 通知监听器
* 定义TextWatcher'
- tWatcher = new TextWatcher(){
- @Override
- public void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
- }
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- // TODO Auto-generated method stub
- updateText(s.toString());
- }
- };
- this.addTextChangedListener(tWatcher);
* 通知监听器
- private void updateText(String s){
- changedListener.onChanged(this, s);
- }
5. 如何使用
- public class Edit2TextTest extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Edit2Text e2t = new Edit2Text(this);
- setContentView(e2t);
- e2t.setOnChangedListener(new Edit2Text.OnTextChangedListener(){
- @Override
- public void onChanged(Edit2Text e2t, String text) {
- // TODO Auto-generated method stub
- Log.d("TAG","[String:]"+text);
- }
- });
- }
- }
6. emulator 运行截图:
*
* Log 信息:
- D/dalvikvm( 674): GC freed 223 objects / 8848 bytes in 108m
- D/TAG ( 941): [String:]i am
- D/TAG ( 941): [String:]i am
- D/TAG ( 941): [String:]i am e
- D/TAG ( 941): [String:]i am ed
- D/TAG ( 941): [String:]i am edi
- D/TAG ( 941): [String:]i am edit
- D/TAG ( 941): [String:]i am edit2
- D/TAG ( 941): [String:]i am edit2t
- D/TAG ( 941): [String:]i am edit2te
- D/TAG ( 941): [String:]i am edit2tex
- D/TAG ( 941): [String:]i am edit2text
- D/TAG ( 941): [String:]i am edit2text,
- D/TAG ( 941): [String:]i am edit2text,
- D/TAG ( 941): [String:]i am edit2text, h
- D/TAG ( 941): [String:]i am edit2text, he
- D/TAG ( 941): [String:]i am edit2text, hel
- D/TAG ( 941): [String:]i am edit2text, hell
- D/TAG ( 941): [String:]i am edit2text, hello
- D/TAG ( 941): [String:]i am edit2text, hello!
Button.setOnClickListener(OnClickListener l) 原理相关推荐
- 微信按钮android代码实现原理,微信小程序button标签open-type实现原理
这篇文章主要介绍了微信小程序button标签open-type属性原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 open-type (微信 ...
- Material Design学习之 Button(详细分析,传说中的水滴动画)
转载请注明出处:王亟亟的大牛之路 上一篇大致介绍了Material Design的一些基本概念传送门:http://blog.csdn.net/ddwhan0123/article/details/5 ...
- Android Button 属性介绍与使用
一.简介 Button 控件继承 TextView,拥有 TextView 的属性. StateListDrawable 是 Drawable 资源的一种,可以根据不同的状态,设置不同的图片效果,关键 ...
- button的setClickable 和 setEnabled 区别
setClickable(false) 是让控件不能点击 ,但是你可能会发现,如果你想暂时的让一个控件不能被点击,但是setClickable(false)这样做了以后,仍然可以被点击,这是为社么呢? ...
- 自定义View的方式给Button或者ImageView添加按键音
通过自定义View的方式,给按钮添加点击音效应该是比较简单的一种方式了 public class MainSoundImageView extends ImageView{private SoundP ...
- View及ViewGroup的事件分发及传递(一)
写这篇博客的缘由不是因为在网上看到了关于Android事件分发的文章,而是一方面因为面试中被问到了,一直在使用却没有真正了解过其原理,另一方面是因为想更多更深入的学习一下.因此在网上找了一些文章 ...
- android onclick执行顺序,浅谈onTouch先执行,还是onClick执行(详解)
有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件 mTestButton.setOnClickListener(new View.OnClickListener() { ...
- Anroid View事件响应机制和ViewGroup的事件响应分发机制
注:低版本的源码内容比高版本的源码简单,分析起来方便,但是高版本源码更为严密. View的事件响应机制 涉及2个方法dispatchTouchEvent和onTouchEvent 1.View的dis ...
- Android-事件分发机制(源码层面)
事件分发的流程: Activity->window->view 例1:当我们对控件的onClick和onTouch事件进行注册时,点击控件两个方法都执行,且onTouch优先于onClic ...
最新文章
- python学习音频-机器学习利用Python进行音频数据增强
- Oracle之索引、权限
- 装饰器前奏2(2017年8月23日 11:50:39)(2017年8月29日 16:07:32)
- 前端学习(2845):秒杀基本介绍
- Qt文档阅读笔记-Rotations Example相关
- FPGA入门基础介绍
- bzoj 2330 糖果
- 微软正式发布PowerShell Core 6.0
- 关于SpringMVC注解
- 与其纠结,不如放弃!
- 基于python爬虫的加盟品牌数据挖掘研究与实现_基于Python 语言的Web 数据挖掘与分析研究...
- Java设计模式——装饰器模式
- ResourceExhaustedError
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- 服务器搭建系列之序章:总览,2022最新版本
- 日常随笔——m1 macbook安装和配置qt
- 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据
- strcpy与strncpy的实现
- 黄色——网页效果图设计之色彩索引
- android gps定位太慢,小米手机gps定位慢怎么解决?小米4解决GPS搜星慢的方法
热门文章
- wxWidgets的一些资源
- OpenCV ORB角点检测
- js循环解析html标签,riot.js教程【六】循环、HTML元素标签
- mysql 垂直拆分 原因_mysql的水平拆分和垂直拆分 (转)
- vue+element-ui实现分页
- JPA关系映射之one-to-many和many-to-one
- js hoisting -- 提升 学习笔记
- ThinkPad L440 FN键设置
- BZOJ1449[JSOI2009]球队收益BZOJ2895球队预算——最小费用最大流
- C# winform combobox 在绑定数据之后插入一项选择项