Implementación de varios TextWatchers en la misma actividad

Yo implemento TextWatcher en el objeto Actividades:

public class Coordinate extends Activity implements TextWatcher {
/** Called when the activity is first created. */
......

Entonces

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ........

Parte de mi problema es que tener más de un TextChangedListener hace que la aplicación se convierta en FC

txtDdLatDeg.addTextChangedListener(this);
txtDMmLatDeg.addTextChangedListener(this);
txtDMSLatDeg.addTextChangedListener(this);

Entonces

@Override
public void afterTextChanged(Editable s) {
    String c = s.toString(); // read Content
    // stuff to do later
    ((EditText)findViewById(R.id.txtDMSLatDeg)).setText(c);
    ((EditText)findViewById(R.id.txtDdLatDeg)).setText(c);
    return;
} // End of TextChanged method

Necesito poder actualizar uno Editar texto y actualizar los otros dos sobre la marcha.
Parece que solo puedo hacer que funcione cuando solo uno Editar texto tiene la addChangeListener.
Tampoco parece que pueda implementar un afterTextChanged método para el individuo Editar texto campos.

preguntado el 09 de enero de 11 a las 00:01

2 Respuestas

Luego créelos como variables de instancia:

TextWatcher watcher1 = 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 s) { }
};
TextWatcher watcher2 = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence c, int i, int i1, int i2) {}
    @Override
    public void onTextChanged(CharSequence c, int i, int i1, int i2) {}
    @Override
    public void afterTextChanged(Editable s) { }
};

Entonces puedes hacer:

txtDdLatDeg.addTextChangedListener(watcher1);
txtDMmLatDeg.addTextChangedListener(watcher1);

Respondido 11 Oct 17, 07:10

No estoy seguro de por qué, pero todavía no puedo hacer que esto funcione con más de un addTextChangedListener declarado ... Seguiré así. - RotorDroid

Ok ... lo resolví usando una declaración if para verificar el enfoque: - RotorDroid

2 methods to implement: - android.text.TextWatcher.beforeTextChanged() - android.text.TextWatcher.onTextChanged() - Pratik Butani

Ok, resolví esto usando onFocus() al Editar texto antes de afterTextChanged método:

onCreate (Bundle icicle) {
    // Usual stuff here
    txtDdLatDeg.addTextChangeListener(watcher1);
}

TextWatcher watcher1 = new TextWatcher() {
    if (txtDdLatDeg.hasFocus()) {
        @Override
        public void afterTextChanged(Editable s) {
            String c = s.toString();
            ((EditText)findViewById(R.id.txtDMSLatDeg)).setText(c); 
            ((EditText)findViewById(R.id.txtDMmLatDeg)).setText(c);     
        }
}};

Creo una variable de instancia para cada Editar texto caja que necesito mirar / manipular.

Respondido 15 Abr '14, 10:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.