android edittext onchange listener

前端 未结 9 2189
长情又很酷
长情又很酷 2020-11-27 13:28

I know a little bit about TextWatcher but that fires on every character you enter. I want a listener that fires whenever the user finishes editing. Is it possib

相关标签:
9条回答
  • 2020-11-27 13:48
     myTextBox.addTextChangedListener(new TextWatcher() {  
    
        public void afterTextChanged(Editable s) {}  
    
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
    
        public void onTextChanged(CharSequence s, int start, int before, int count) {  
    
        TextView myOutputBox = (TextView) findViewById(R.id.myOutputBox);  
        myOutputBox.setText(s);  
    
        }  
    });  
    
    0 讨论(0)
  • 2020-11-27 13:49

    I have done it using AutotextView:

    AutotextView textView = (AutotextView) findViewById(R.id.autotextview);
    textView.addTextChangedListener(new TextWatcher() {
    
        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            seq = cs;
        }
    
        @Override
        public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
    
        }
    
        @Override
        public void afterTextChanged(Editable arg0) {
            new SearchTask().execute(seq.toString().trim());
        }
    
    });
    
    0 讨论(0)
  • 2020-11-27 13:56

    It was bothering me that implementing a listener for all of my EditText fields required me to have ugly, verbose code so I wrote the below class. May be useful to anyone stumbling upon this.

    public abstract class TextChangedListener<T> implements TextWatcher {
        private T target;
    
        public TextChangedListener(T target) {
            this.target = target;
        }
    
        @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) {
            this.onTextChanged(target, s);
        }
    
        public abstract void onTextChanged(T target, Editable s);
    }
    

    Now implementing a listener is a little bit cleaner.

    editText.addTextChangedListener(new TextChangedListener<EditText>(editText) {
                @Override
                public void onTextChanged(EditText target, Editable s) {
                    //Do stuff
                }
            });
    

    As for how often it fires, one could maybe implement a check to run their desired code in //Do stuff after a given a

    0 讨论(0)
提交回复
热议问题