今天在做邮件登录的时候,遇到了输入框(Edittext)监听事件(TextWatcher),现在记录下。

首先看如下代码

eText.addTextChangedListener(new TextWatcher() {

            @Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
Log.e("123", "ontextchange----" + "|arg0===" + arg0 + "|arg1===" + arg1
+ "|arg2===" + arg2 + "|arg3===" + arg3);
} @Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
Log.e("123", "before----" + "|arg0===" + arg0 + "|arg1===" + arg1
+ "|arg2===" + arg2 + "|arg3===" + arg3);
} @Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
Log.e("123", "afterchange----" + "|arg0===" + arg0);
}
});

然后我们看下输出的log

1.这个是连续输入时候的log

- ::56.692: E/(): before----|arg0===|arg1===|arg2===|arg3===
- ::56.693: E/(): ontextchange----|arg0===|arg1===|arg2===|arg3===
- ::56.695: E/(): afterchange----|arg0===
- ::04.962: E/(): before----|arg0===|arg1===|arg2===|arg3===
- ::04.963: E/(): ontextchange----|arg0===1理解|arg1===|arg2===|arg3===
- ::04.965: E/(): afterchange----|arg0===1理解
- ::09.192: E/(): before----|arg0===1理解|arg1===|arg2===|arg3===
- ::09.193: E/(): ontextchange----|arg0===1理解我|arg1===|arg2===|arg3===
- ::09.200: E/(): afterchange----|arg0===1理解我

2.这个是当我们删除一个字符的时候的输出结果

- ::26.863: E/(): before----|arg0===1理解我|arg1===|arg2===|arg3===
- ::26.863: E/(): ontextchange----|arg0===1理解|arg1===|arg2===|arg3===
- ::26.877: E/(): afterchange----|arg0===1理解

通过上面的结果我们总结下TextWatch的监听事件三个方法以及参数的意义

触发过程:
 
beforeTextChanged(CharSequence s,int start,int count,int after);
在EditText里的内容即将发生变化之前触发,它保留的其实是上次事件的结果

该方法反映的是,EditText在要发生变化之前,原来的内容字符串s有哪几个字符将要发生何种变化。
无论何种变化方式,都可以理解为:输入框的原内容字符串s,从索引位置start(索引从0开始)开始,
有count个字符即将被替换,替换这count个字符的新的字符个数为after
s 是变化之前的edittext内容
 
onTextChanged(CharSequence s,int start,int before,int count);

在EditText里的内容发生变化之时触发,

在变化时的新的字符串s里,从索引位置start开始,有count个字符,是替换了原来的before个字符的
注意:s是变化之后的输入框内容
这个方法的参数值,结果应该是跟before 方法参数一样的
 
afterTextChanged(Editable s)

text变化之后触发,s是最终新的输入框内容

如果我们希望监听edittext,然后通过它的内容变化最edittext进行操作。操作应该是在after方法中进行。而且,在监听事件中进行edittext值操作,一定要避免事件的死循环。因为每一次edittext变化,都是导致监听事件的执行。

 

TextWatcher-监听输入框内容变化的更多相关文章

  1. HTML5 oninput实时监听输入框值变化的完美方案

    在网页开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理组合快 ...

  2. 【转载】实时监听输入框值变化的完美方案:oninput & onpropertychange

    oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有 ...

  3. js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange

    (1)     先说jquery, 使用 jQuery 库的话,只需要同时绑定 oninput 和 onpropertychange 两个事件就可以了,示例代码: $('#username').bin ...

  4. 实时监听输入框值变化:oninput & onpropertychange

    结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. oninput 是 HTML5 的标准事件,对于检测 textarea, i ...

  5. 实时监听输入框值变化的完美方案:oninput & onpropertychange

    实时监听输入框值变化的完美方案:oninput & onpropertychange: 网址:http://www.cnblogs.com/lhb25/archive/2012/11/30/o ...

  6. jquery实时监听输入框值变化

    在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能满足条 ...

  7. html5 实时监听输入框值变化的完美方案:oninput & onpropertychange

    结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. H5手机端: <input type="text" ...

  8. js与jquery实时监听输入框值变化方法

    本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...

  9. Js/jQuery实时监听输入框值变化

    前言 在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能 ...

  10. JQuery如何监听DIV内容变化

    这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...

随机推荐

  1. 一些 <link> 标记分享

    <link rel="alternate" media="handheld" href="#" /> <link rel= ...

  2. GoldenGate 性能优化方法

    从根本上讲,OGG复制性能和要复制的表是否存在主键和唯一索引有很大关系,所以从应用系统开发商对表结构的规范更为有效.OGG调优通常采用拆分进行的方式,拆分方法如下所述. Extract拆分方法 1)  ...

  3. GoldenGate 反向切换步骤

    1 事先配置好反向复制链路: 2 停止源端的应用程序; 3 确认源端Capture已捕获所有的Redo信息: GGSCI>info all GGSCI>info ext_app 4 确认源 ...

  4. @property 的本质是什么?

    将访问.变量.访问控制进行了绑定:编译器负责自动合成. @dynamic:不会自动合成成员变量和存取方法. @property 的本质是什么?@property = ivar + getter + s ...

  5. dijkstra STL 堆优化

    Code: #include<iostream> #include<algorithm> #include<vector> #include<queue> ...

  6. 设置多行文本框不能拓展大小和span标签边框设置

    resize: none;/*设置多行文本框,不能拓展大小*/ #span { display: block; border: 1px solid RGB(169,169,169); /* span标 ...

  7. php八大设计模式之单例模式

    单例模式的好处: 实例化后只得到一个对象,减少内存的开销. 实现单例模式: 提供一个私有的属性用来存储实例后的对象. 禁止外部实例化对象,提供公共的的方法,返回实例化后的对象. 避免继承此类,然后重写 ...

  8. YOLOv3学习笔记

    Darknet/Yolo官网:https://pjreddie.com/darknet/yolo/ GitHub程序:https://github.com/AlexeyAB/darknet 关于程序程 ...

  9. CMSIS-RTOS 信号量

    信号量Semaphores 和信号类似,信号量也是一种同步多个线程的方式,简单来讲,信号量就是装有一些令牌的容器.当一个线程在执行过程中,就可能遇到一个系统调用来获取信号量令牌,如果这个信号量包含多个 ...

  10. bootstrap结合google code prettify的问题

    发现prettify不能显示行号,于是上网找了解决方法: 只使用prettify的js的文件,不使用css文件,另外添加这段css: .com { color: #93a1a1; } .lit { c ...