2016-08-03 8 views
0

私は、http://173.199.129.149/~tiffinex/Dev/MTO/beta/index-calculator.phpのような変換電卓を作成していますが、1つのテキスト変更リスナーを使用しています。私はそれが応答を与えるものではありません。二つ以上のテキスト変更リスナーを試み、私のアプリは、コードは以下のとおりである、動作を停止しfine.Whenそれはあなたがまた、他の設定されているので、あなたがこの問題を得ているandroidで2つ以上のテキストチェンジリスナーを使用する方法

et1 = (EditText)findViewById(R.id.editText); 
et2 = (EditText)findViewById(R.id.editText2); 
et3 = (EditText)findViewById(R.id.editText3); 

et1.addTextChangedListener(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) { 

if (et1.getText().toString().equals("")) { 
    et2.setText("0"); 
    et3.setText("0"); 
    } else { 
     String s1 = et1.getText().toString(); 
     Double d1 = Double.parseDouble(s1); 
     Double d3 = d1 * 12; 
     String s3 = Double.toString(d3); 

     et2.setText(s3); 
     Double d4 = d1 * 0.3048; 
     String s4 = Double.toString(d4); 
     et3.setText(s4); 
     } 
} 

@Override 
public void afterTextChanged(Editable editable) {} 
}); 

et2.addTextChangedListener(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) { 

if (et2.getText().toString().equals("")) { 
    et1.setText("0"); 
    et3.setText("0"); 
} else { 
    String s1 = et2.getText().toString(); 
    Double d1 = Double.parseDouble(s1); 
    Double d3 = d1/12; 
    String s3 = Double.toString(d3); 

     et1.setText(s3); 
     Double d4 = d1 * 39.40; 
     String s4 = Double.toString(d4); 
     et3.setText(s4); 
    } 

@Override 
public void afterTextChanged(Editable editable) { 
} 
}); 

et3.addTextChangedListener(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)  { 

if (et3.getText().toString().equals("")) { 
et2.setText("0"); 
et1.setText("0"); 
} else { 
    String s1 = et3.getText().toString(); 
    Double d1 = Double.parseDouble(s1); 
    Double d3 = d1 * 39.40; 
    String s3 = Double.toString(d3); 

    et1.setText(s3); 
    Double d4 = d1/3.48; 
    String s4 = Double.toString(d4); 
    et3.setText(s4); 
    } 

@Override 
public void afterTextChanged(Editable editable) {} 
}); 
} 
+0

http://stackoverflow.com/questions/5702771/how-to-use-single-textwatcher-for-multiple-edittexts –

答えて

0

、作品あなたのTextWatcherの中のEditTextを呼び出して、基本的にsetText()コールの連鎖反応を引き起こします。これを克服するために、TextWatcherコールバックは、ユーザーの現在のフォーカスがEditTextgetCurrentFocus()を使用している場合にのみ発生します。あなたのコード内:

et1 = (EditText)findViewById(R.id.editText); 
et2 = (EditText)findViewById(R.id.editText2); 
et3 = (EditText)findViewById(R.id.editText3);  

et1.addTextChangedListener(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) { 

if (getCurrentFocus() == et1) { 
    if (et1.getText().toString().equals("")) { 
     et2.setText("0"); 
     et3.setText("0"); 
     } else { 
      String s1 = et1.getText().toString(); 
      Double d1 = Double.parseDouble(s1); 
      Double d3 = d1 * 12; 
      String s3 = Double.toString(d3); 

      et2.setText(s3); 
      Double d4 = d1 * 0.3048; 
      String s4 = Double.toString(d4); 
      et3.setText(s4); 
     } 
    } 
} 

@Override 
public void afterTextChanged(Editable editable) {} 
}); 

et2.addTextChangedListener(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) { 

if (getCurrentFocus() == et2) { 
    if (et2.getText().toString().equals("")) { 
     et1.setText("0"); 
     et3.setText("0"); 
    } else { 
     String s1 = et2.getText().toString(); 
     Double d1 = Double.parseDouble(s1); 
     Double d3 = d1/12; 
     String s3 = Double.toString(d3); 

     et1.setText(s3); 
     Double d4 = d1 * 39.40; 
     String s4 = Double.toString(d4); 
     et3.setText(s4); 
    } 
} 

@Override 
public void afterTextChanged(Editable editable) { 
} 
}); 

et3.addTextChangedListener(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)  { 

if (getCurrentFocus() == et3) { 
    if (et3.getText().toString().equals("")) { 
     et2.setText("0"); 
     et1.setText("0"); 
    } else { 
     String s1 = et3.getText().toString(); 
     Double d1 = Double.parseDouble(s1); 
     Double d3 = d1 * 39.40; 
     String s3 = Double.toString(d3); 

     et1.setText(s3); 
     Double d4 = d1/3.48; 
     String s4 = Double.toString(d4); 
     et3.setText(s4); 
    } 
} 

@Override 
public void afterTextChanged(Editable editable) {} 
}); 
} 
関連する問題