2011-01-09 105 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导致应用程序到FC

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和对飞行的其他两个更新。
我只能使它工作时只有一个EditTextaddChangeListener
我也似乎无法实现个别EditText字段的单独的afterTextChanged方法。

回答

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 2011-01-09 02:13:17

2

好吧,我解决了这个由afterTextChanged方法之前,对的EditText使用onFocus()

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

我创建了一个in每个姿态变量EditText框我需要观看/操作。