2016-04-14 56 views
0

我有两个编辑文本,每一个有文字守望者,当第一的EditText文本改变时改变第二的EditText文本,似乎代码创建一个循环,是有什么我可以做,使文本守望者只听用户输入,而不是通过代码改变文本?的EditText addTextChangedListener环

et1.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      double x = Double.valueOf(et1.getText().toString()); 
      et2.setText(String.valueOf((x*2))); 
     } 
    }); 

    et2.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      double x = Double.valueOf(et2.getText().toString()); 
      et1.setText(String.valueOf((x/2))); 
     } 
    }); 
+0

可以use'FocusChangeListener()'本' –

+1

公共无效afterTextChanged(编辑S){如果(mIsCalledFromWatcher!){mIsCalledFromWatcher = TRUE;/*做的东西*/mIsCalledFromWatcher = false; }}'... [看看TextView.setText()](https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/TextView.java#L4211)看发生了什么... setText导致另一个afterTextChanged调用 – Selvin

+0

你已经构建了一个无限循环 – jr593

回答

1

你可以保持在TextWatcher参考需要在手术前,当后来把他们带回删除它们。

private TextWatcher tv1; 
private TextWatcher tv2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final EditText et1 = (EditText) findViewById(R.id.editText); 
    final EditText et2 = (EditText) findViewById(R.id.editText1); 

    tv1 = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) {} 

     @Override 
     public void afterTextChanged(Editable s) { 
      double x = Double.valueOf(et1.getText().toString()); 
      et2.removeTextChangedListener(tv2); // "disable" the watcher 
      et2.setText(String.valueOf((x*2))); 
      et2.addTextChangedListener(tv2); // "enable" the watcher 
     } 
    }; 

    tv2 = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) {} 

     @Override 
     public void afterTextChanged(Editable s) { 
      double x = Double.valueOf(et2.getText().toString()); 
      et1.removeTextChangedListener(tv1); // "disable" the watcher 
      et1.setText(String.valueOf((x/2))); 
      et1.addTextChangedListener(tv1); // "enable" the watcher 
     } 
    }; 

    et1.addTextChangedListener(tv1); 
    et2.addTextChangedListener(tv2); 
} 
相关问题