美文网首页
Android TextWatchwer使用注意事项

Android TextWatchwer使用注意事项

作者: Lonelyyy | 来源:发表于2018-01-25 00:35 被阅读0次

    TextWatcher的使用想必很多人都不陌生,用来监听edittext的内容变化是非常方便的继承TextWatcher接口并重写方法即可

    public interface TextWatcher extends NoCopySpan {
        
        public void beforeTextChanged(CharSequence s, int start, int count, int after);
      
        public void onTextChanged(CharSequence s, int start, int before, int count);
        
        public void afterTextChanged(Editable s);
    }
    

    1.使用举例

    editText.addTextChangedListener(new 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) {
    
                }
            });
    

    2.注意事项

    建议重写的TextWatcher不要使用匿名内部类,并且使用完之后记得remove,像这样

    TextWatcher watcher = new 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) {
                }
            };
            editText.addTextChangedListener(watcher);
            ...
            editText.removeTextChangedListener(watcher);
    

    这样做的原因是可以避免TextWatcher中的接口被多次回调,可以看一看TextView源码的实现

    private ArrayList<TextWatcher> mListeners;
    
    public void addTextChangedListener(TextWatcher watcher) {
            if (mListeners == null) {
                mListeners = new ArrayList<TextWatcher>();
            }
            mListeners.add(watcher);
        }
    

    可以看到,TextView中用mListeners来保存传入的TextWatcher,当出现内容变化时再调用每个TextWatcher的内部方法,
    然而,mListeners是一个ArrayList,ArrayList内部是允许重复元素的,所以,当一个textview的addTextChangedListener被执行多次的时候,其内部的方法也会被重复调用多次,就可能会带来一些bug,所以还是保持个好习惯,就像注册广播后要取消一样

    相关文章

      网友评论

          本文标题:Android TextWatchwer使用注意事项

          本文链接:https://www.haomeiwen.com/subject/oigpaxtx.html