使用TextWatcher监听EditText的文本变化之后动态改变EditText里面的内容
2012-12-20 17:53
399 查看
今天碰到一个这样的问题:使用TextWatcher对EditText进行监听,当EditText中值为某一特定内容时,将EditText中的值设为我们需要的那个值。一开始就是简单的在EditText中使用setText(...)来实现,结果出现栈溢出的异常。这里提供一个解决方案:当判断条件满足时,在afterTextChanged()方法中将TextWatcher移除掉,然后设置EditText的值,接着把TextWatcher重新设置进去。就是这么简单,这里我们判断如果EditText中的值为111,就将EditText的值设置为11111new。先看效果图,再看代码。
效果图:
代码:
文档已经说的很清楚了,该方法仅仅是将当前的TextWatcher从集合中移除。我们可以理解成该TextWatcher对象暂时未被回收,所以在不进行耗时操作的情况下,该解决方案是可行的,不知道还有没有更好的方式,如果某位朋友有更好的方式,可以拿出来一起分享。
效果图:
代码:
EditText editText; MyTextWathcer myTextWathcer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText = (EditText) findViewById(R.id.editText); myTextWathcer = new MyTextWathcer(); editText.addTextChangedListener(myTextWathcer); } private class MyTextWathcer implements TextWatcher{ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { int i = 0; try { i = Integer.valueOf(s.toString()); } catch (Exception e) { e.printStackTrace(); } if(i == 111){ editText.removeTextChangedListener(this); setMyText(); } } } private void setMyText(){ editText.setText("11111new"); editText.addTextChangedListener(myTextWathcer); }可能很多童鞋会奇怪,为什么在自己类的方法中将自己移除不会出错?我们去TextView类的removeTextChangedListener()方法中看一下大概就会明白了。该方法如下:
/** * Removes the specified TextWatcher from the list of those whose * methods are called * whenever this TextView's text changes. */ public void removeTextChangedListener(TextWatcher watcher) { if (mListeners != null) { int i = mListeners.indexOf(watcher); if (i >= 0) { mListeners.remove(i); } } }
文档已经说的很清楚了,该方法仅仅是将当前的TextWatcher从集合中移除。我们可以理解成该TextWatcher对象暂时未被回收,所以在不进行耗时操作的情况下,该解决方案是可行的,不知道还有没有更好的方式,如果某位朋友有更好的方式,可以拿出来一起分享。
相关文章推荐
- Android应用开发EditText文本内容变化监听方法
- 学习笔记-Android之ListView随EditText输入内容动态改变
- Android应用开发EditText文本内容变化监听方法
- listview多个edittext的内容编辑时高度变化,而在ScrollView里,listview改变高度
- Android 根据Edittext内容动态改变Listview显示的数据
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- Android应用开发EditText文本内容变化监听方法
- Android 监听EditText控件文本变化并修改显示内容
- Android应用开发EditText文本内容变化监听方法
- Android应用开发EditText文本内容变化监听方法
- 39_震动服务&动态的监听edittext文本变化
- Android中动态监听EditText控件内容变化
- 【JS事件】input文本内容改变可使用的事件
- Android EditText/TextView使用SpannableString显示复合文本
- 将样式动态地应用到EditText的内容上
- EditText动态设置文本类型
- iOS--根据文本内容的长度动态改变label的宽度(有最大值)
- 杂记之使用代码动态的改变文本、按钮的颜色
- Android监听EditText内容变化
- 监听EditText内容变化