2011-01-09 2 views
0

я реализую TextWatcher в деятельности:Реализация нескольких TextWatchers на одной и той же деятельности

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

Тогда

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

Часть моей проблемы заключается в том, что имея более чем один TextChangedListener вызывает приложение до ФК

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

Тогда

@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 

Мне нужно, чтобы иметь возможность обновить один EditText и имеют другие два обновления на лету.
Может показаться, что это работает, когда только один EditText имеет addChangeListener.
Я также не могу реализовать отдельный afterTextChanged метод для отдельного пользователя EditText полей.

ответ

4

Затем создайте их в качестве переменных экземпляра:

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) { } 
}; 

Тогда вы можете сделать:

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

Не знаю, почему, но я до сих пор не могу заставить это работать с более чем одним объявлением addTextChangedListener ... Я буду держать на нем. – RotorDroid

+1

Хорошо ... Я решил это с помощью инструкции if для проверки фокуса: – RotorDroid

+0

'2 метода для реализации: - android.text.TextWatcher.beforeTextChanged() - android.text.TextWatcher.onTextChanged()' –

2

Хорошо, я решил эту проблему с помощью onFocus() на EditText перед методом afterTextChanged:

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);  
     } 
}}; 

Я создаю в переменная положения для каждого EditText box Мне нужно наблюдать/манипулировать.

Смежные вопросы