Android 监听EditText控件文本变化并修改显示内容

来源:互联网 发布:suse 查看端口 编辑:程序博客网 时间:2024/05/22 17:13

在软件设计中我们会遇到这样的请求,比如用户购物时可以在文本框EditText内只能输入整数,而且大小不能超过对应商品的剩余数额num。前者好办,设置EditText的inputType就可以了,后者就需要监听EditText的文本变化。
在网上浏览了一圈,看到的监听器都只能监听文本的变化,而不能修改EditText的文本显示,还是自己动手解决吧。

  EditText viewById = (EditText)findViewById(R.id.edit);  viewById.addTextChangedListener(new TextWatcher() {            @Override            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {            }            @Override            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {            }            @Override            public void afterTextChanged(Editable editable) {                String originText = editable.toString();                String myText="konijiwa";                CharSequence charSequence = myText.subSequence(0, myText.length());                if(i==0) {                    i++;                    editable.replace(0, originText.length(), charSequence);                }            }        });

通过分析editable.replace(int st, int en, CharSequence text)方法,参数st代表待替换的EditText的文本的初始位置,en代表结束位置,英文过关的同道可以自行查看源代码注释。上述代码中使用(i==0)作为是否执行替换文本操作的判定条件。值得提醒的是,执行editable.replace(0, originText.length(), charSequence)方法之后,会立即再次触发TextWatcher文本监听器中的方法,因为文本在代码中再次修改了。也就是代码如下,

 if(i==0) {     editable.replace(0, originText.length(), charSequence);     i++;           }

那么i++将永远无法执行,程序会陷入死循环。所以我们应该把触发替换文本操作的标志(i的值)的修改,放在替换操作执行之前完成。

原创粉丝点击