Die Implementierung mehrerer TextWatchers auf der gleichen Aktivität
-
08-10-2019 - |
Frage
ich implementieren TextWatcher in der Aktivität :
public class Coordinate extends Activity implements TextWatcher {
/** Called when the activity is first created. */
......
Dann
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
........
Ein Teil meines Problems ist, dass mehr als ein TextChangedListener mit bewirkt, dass die App FC
txtDdLatDeg.addTextChangedListener(this);
txtDMmLatDeg.addTextChangedListener(this);
txtDMSLatDeg.addTextChangedListener(this);
Dann
@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
Ich muss in der Lage sein, einen zu aktualisieren EditText und haben die beiden anderen Update on the fly.
Ich kann nur scheint es funktioniert zu machen, wenn nur ein EditText die addChangeListener
hat.
Ich kann auch nicht scheinen, eine separate afterTextChanged
Methode für den einzelnen EditText Felder aus.
Lösung
Dann erstellen sie als Instanzvariablen:
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) { }
};
Dann können Sie tun:
txtDdLatDeg.addTextChangedListener(watcher1);
txtDMmLatDeg.addTextChangedListener(watcher1);
Andere Tipps
Ok, ich löste dies durch onFocus()
mit auf dem EditText vor der afterTextChanged
Methode:
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);
}
}};
ich eine Instanzvariable erstellen für jedes EditText Box Ich beobachte müssen / manipulieren.