今天在做邮件登录的时候,遇到了输入框(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变化,都是导致监听事件的执行。