2 つのフィールドがある状況があります。field1
と です。 が変更されたときに をfield2
空にし、その逆も実行したいだけです。 そのため、最終的には 1 つのフィールドだけにコンテンツが存在します。field2
field1
field1 = (EditText)findViewById(R.id.field1);
field2 = (EditText)findViewById(R.id.field2);
field1.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
field2.setText("");
}
});
field2.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
field1.setText("");
}
});
addTextChangedListener
どちらか一方にアタッチした場合は正常に動作しますfield1
が、両方のフィールドにアタッチするとアプリがクラッシュします。明らかに、お互いを無期限に変更しようとするためです。field1
変更されるとクリアされ、field2
その瞬間にfield2
変更されるとクリアされfield1
ます。
誰か解決策を提案してもらえますか?
ベストアンサー1
フィールド内のテキストが空でない場合にのみクリアするチェックを追加できます (つまり、長さが 0 と異なる場合)。
field1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if(s.length() != 0)
field2.setText("");
}
});
field2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if(s.length() != 0)
field1.setText("");
}
});
ドキュメントTextWatcher
ここ。
また、尊重してください命名規則。