【问题标题】:Implementing multiple TextWatchers on the same Activity在同一个 Activity 上实现多个 TextWatcher
【发布时间】:2011-01-09 00:17:16
【问题描述】:

我在Activity中实现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 方法。

【问题讨论】:

    标签: android listener android-edittext textwatcher


    【解决方案1】:

    然后将它们创建为实例变量:

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

    【讨论】:

    • 不知道为什么,但我仍然无法让它与多个声明的 addTextChangedListener 一起工作......我会坚持下去。
    • 好的...我通过使用 if 语句检查焦点来解决它:
    • 2 methods to implement: - android.text.TextWatcher.beforeTextChanged() - android.text.TextWatcher.onTextChanged()
    【解决方案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);     
            }
    }};
    

    我为每个需要观察/操作的 EditText 框创建一个实例变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多