TextWatcher-监听输入框内容变化

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

 
posted @ 2015-07-27 17:21  小白屋  阅读(694)  评论(0编辑  收藏  举报