在同一个Activity上实现多个TextWatcher

时间:2011-01-09 00:17:17

标签: android listener android-edittext textwatcher

我在活动中实现 TextWatcher

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 ,并在运行中另外两个更新。
当只有一个 EditText 具有addChangeListener时,我似乎只能使它工作。
我似乎也无法为单个 EditText 字段实现单独的afterTextChanged方法。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 框创建一个实例变量。

相关问题