Android EditText: テキストの変更をリッスンし、他のフィールドを空にする
2 つのフィールドのうち 1 つだけにデータが含まれるようにするには、次のことが不可欠になります。一方のフィールドが変更された場合は、もう一方のフィールドをクリアします。この必要性は、2 つの EditText フィールドである field1 と field2 が両方とも同時に値を保持すべきではない状況で発生します。
質問に示されているように、TextWatcher を field1 と field2 の両方にアタッチすると、フィールドがそれぞれをクリアする無限ループが発生します。
解決策:
この問題を解決するには、現在のフィールドにテキストが含まれている場合にのみ、反対側のフィールドをクリアするチェックを実装します。これは、入力文字列の長さを調べることで実現できます。
以下の変更されたコードでは、「if」ステートメントは、入力文字列 (つまり、現在のフィールドに入力されたテキスト) の長さが正しいかどうかをチェックします。そうである場合、反対側のフィールドはクリアされます:
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(""); } });
このチェックを組み込むことにより、無限ループが解消され、目的の機能が達成され、フィールドの 1 つだけにデータが含まれることが保証されます。いつでも。
以上がAndroid で EditText フィールドをクリアするときに無限ループを防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。