• 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变化,都是导致监听事件的执行。

     
  • 相关阅读:
    HTTP和HTTPS协议
    Django后台缓存运用,提高并发
    Python用摘要算法生成token及检验token
    Django框架rest_framework中APIView的as_view()源码解析、认证、权限、频率控制
    跨域请求
    Django中的缓存机制
    Django框架之Auth模块
    Django框架之中间件、CSRF跨站请求伪造
    Django框架之Cookie和Session组件
    Django框架之Forms组件(基于注册功能)
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_textwatch_15727172.html
Copyright © 2020-2023  润新知