【转自】http://www.iteye.com/topic/635466

使用Button 可能都会监听之 当其被点击 就会有函数负责回调 那么其到底是怎么实现的呢?

今天要做的就是摸清楚之 为了减少不必要的麻烦 打算extends EditText 并在其上设立监听器

[代码 步骤]

1. 定义Edit2Text 且extends EditText

Java代码  
  1. public class Edit2Text extends EditText {
  2. OnTextChangedListener changedListener;
  3. TextWatcher tWatcher;
  4. }

2. 定义其上的监听器:OnTextChangedListener 并定义函数:onChanged() 用于执行具体回调

Java代码  
  1. public static interface OnTextChangedListener {
  2. public void onChanged(Edit2Text e2t, String text);
  3. }
Java代码  
  1. 需要注意的 这几行代码的修饰关键字:
  2. 1. static :使其能够脱离Edit2Text而存在
  3. 2. interface : 使其自动填充其内部函数
  4. 3. “void onChanged(Edit2Text e2t, String text)” 中的第一个参数e2t 用于做分别 具体奥妙 后面再细说

3.  设定监听器

Java代码  
  1. public void setOnChangedListener(OnTextChangedListener l){
  2. changedListener = l;
  3. }

4. 定义TextWatcher 当字符内容改变 通知监听器

* 定义TextWatcher'

Java代码  
  1. tWatcher = new TextWatcher(){
  2. @Override
  3. public void afterTextChanged(Editable s) {
  4. // TODO Auto-generated method stub
  5. }
  6. @Override
  7. public void beforeTextChanged(CharSequence s, int start, int count,
  8. int after) {
  9. // TODO Auto-generated method stub
  10. }
  11. @Override
  12. public void onTextChanged(CharSequence s, int start, int before,
  13. int count) {
  14. // TODO Auto-generated method stub
  15. updateText(s.toString());
  16. }
  17. };
  18. this.addTextChangedListener(tWatcher);

* 通知监听器

Java代码  
  1. private void updateText(String s){
  2. changedListener.onChanged(this, s);
  3. }

5. 如何使用

Java代码  
  1. public class Edit2TextTest extends Activity {
  2. /** Called when the activity is first created. */
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. Edit2Text e2t = new Edit2Text(this);
  8. setContentView(e2t);
  9. e2t.setOnChangedListener(new Edit2Text.OnTextChangedListener(){
  10. @Override
  11. public void onChanged(Edit2Text e2t, String text) {
  12. // TODO Auto-generated method stub
  13. Log.d("TAG","[String:]"+text);
  14. }
  15. });
  16. }
  17. }

6. emulator 运行截图:

* Log 信息:

Java代码  
  1. D/dalvikvm(  674): GC freed 223 objects / 8848 bytes in 108m
  2. D/TAG     (  941): [String:]i am
  3. D/TAG     (  941): [String:]i am
  4. D/TAG     (  941): [String:]i am e
  5. D/TAG     (  941): [String:]i am ed
  6. D/TAG     (  941): [String:]i am edi
  7. D/TAG     (  941): [String:]i am edit
  8. D/TAG     (  941): [String:]i am edit2
  9. D/TAG     (  941): [String:]i am edit2t
  10. D/TAG     (  941): [String:]i am edit2te
  11. D/TAG     (  941): [String:]i am edit2tex
  12. D/TAG     (  941): [String:]i am edit2text
  13. D/TAG     (  941): [String:]i am edit2text,
  14. D/TAG     (  941): [String:]i am edit2text,
  15. D/TAG     (  941): [String:]i am edit2text, h
  16. D/TAG     (  941): [String:]i am edit2text, he
  17. D/TAG     (  941): [String:]i am edit2text, hel
  18. D/TAG     (  941): [String:]i am edit2text, hell
  19. D/TAG     (  941): [String:]i am edit2text, hello
  20. D/TAG     (  941): [String:]i am edit2text, hello!

Button.setOnClickListener(OnClickListener l) 原理相关推荐

  1. 微信按钮android代码实现原理,微信小程序button标签open-type实现原理

    这篇文章主要介绍了微信小程序button标签open-type属性原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 open-type (微信 ...

  2. Material Design学习之 Button(详细分析,传说中的水滴动画)

    转载请注明出处:王亟亟的大牛之路 上一篇大致介绍了Material Design的一些基本概念传送门:http://blog.csdn.net/ddwhan0123/article/details/5 ...

  3. Android Button 属性介绍与使用

    一.简介 Button 控件继承 TextView,拥有 TextView 的属性. StateListDrawable 是 Drawable 资源的一种,可以根据不同的状态,设置不同的图片效果,关键 ...

  4. button的setClickable 和 setEnabled 区别

    setClickable(false) 是让控件不能点击 ,但是你可能会发现,如果你想暂时的让一个控件不能被点击,但是setClickable(false)这样做了以后,仍然可以被点击,这是为社么呢? ...

  5. 自定义View的方式给Button或者ImageView添加按键音

    通过自定义View的方式,给按钮添加点击音效应该是比较简单的一种方式了 public class MainSoundImageView extends ImageView{private SoundP ...

  6. View及ViewGroup的事件分发及传递(一)

     写这篇博客的缘由不是因为在网上看到了关于Android事件分发的文章,而是一方面因为面试中被问到了,一直在使用却没有真正了解过其原理,另一方面是因为想更多更深入的学习一下.因此在网上找了一些文章 ...

  7. android onclick执行顺序,浅谈onTouch先执行,还是onClick执行(详解)

    有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件 mTestButton.setOnClickListener(new View.OnClickListener() { ...

  8. Anroid View事件响应机制和ViewGroup的事件响应分发机制

    注:低版本的源码内容比高版本的源码简单,分析起来方便,但是高版本源码更为严密. View的事件响应机制 涉及2个方法dispatchTouchEvent和onTouchEvent 1.View的dis ...

  9. Android-事件分发机制(源码层面)

    事件分发的流程: Activity->window->view 例1:当我们对控件的onClick和onTouch事件进行注册时,点击控件两个方法都执行,且onTouch优先于onClic ...

最新文章

  1. python学习音频-机器学习利用Python进行音频数据增强
  2. Oracle之索引、权限
  3. 装饰器前奏2(2017年8月23日 11:50:39)(2017年8月29日 16:07:32)
  4. 前端学习(2845):秒杀基本介绍
  5. Qt文档阅读笔记-Rotations Example相关
  6. FPGA入门基础介绍
  7. bzoj 2330 糖果
  8. 微软正式发布PowerShell Core 6.0
  9. 关于SpringMVC注解
  10. 与其纠结,不如放弃!
  11. 基于python爬虫的加盟品牌数据挖掘研究与实现_基于Python 语言的Web 数据挖掘与分析研究...
  12. Java设计模式——装饰器模式
  13. ResourceExhaustedError
  14. 使用CSS3开启GPU硬件加速提升网站动画渲染性能
  15. 服务器搭建系列之序章:总览,2022最新版本
  16. 日常随笔——m1 macbook安装和配置qt
  17. 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据
  18. strcpy与strncpy的实现
  19. 黄色——网页效果图设计之色彩索引
  20. android gps定位太慢,小米手机gps定位慢怎么解决?小米4解决GPS搜星慢的方法

热门文章

  1. wxWidgets的一些资源
  2. OpenCV ORB角点检测
  3. js循环解析html标签,riot.js教程【六】循环、HTML元素标签
  4. mysql 垂直拆分 原因_mysql的水平拆分和垂直拆分 (转)
  5. vue+element-ui实现分页
  6. JPA关系映射之one-to-many和many-to-one
  7. js hoisting -- 提升 学习笔记
  8. ThinkPad L440 FN键设置
  9. BZOJ1449[JSOI2009]球队收益BZOJ2895球队预算——最小费用最大流
  10. C# winform combobox 在绑定数据之后插入一项选择项