今天在做邮件登录的时候,遇到了输入框(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
07-27 16:58:56.692: E/123(6298): before----|arg0===|arg1===0|arg2===0|arg3===1 07-27 16:58:56.693: E/123(6298): ontextchange----|arg0===1|arg1===0|arg2===0|arg3===1 07-27 16:58:56.695: E/123(6298): afterchange----|arg0===1 07-27 16:59:04.962: E/123(6298): before----|arg0===1|arg1===1|arg2===0|arg3===2 07-27 16:59:04.963: E/123(6298): ontextchange----|arg0===1理解|arg1===1|arg2===0|arg3===2 07-27 16:59:04.965: E/123(6298): afterchange----|arg0===1理解 07-27 16:59:09.192: E/123(6298): before----|arg0===1理解|arg1===3|arg2===0|arg3===1 07-27 16:59:09.193: E/123(6298): ontextchange----|arg0===1理解我|arg1===3|arg2===0|arg3===1 07-27 16:59:09.200: E/123(6298): afterchange----|arg0===1理解我
2.这个是当我们删除一个字符的时候的输出结果
07-27 16:59:26.863: E/123(6298): before----|arg0===1理解我|arg1===3|arg2===1|arg3===0 07-27 16:59:26.863: E/123(6298): ontextchange----|arg0===1理解|arg1===3|arg2===1|arg3===0 07-27 16:59:26.877: E/123(6298): 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变化,都是导致监听事件的执行。