ホームページ >Java >&#&チュートリアル >テキスト変更時に EditText フィールドをクリアするときに無限ループを防ぐ方法は?

テキスト変更時に EditText フィールドをクリアするときに無限ループを防ぐ方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-20 12:19:09279ブラウズ

How to Prevent Infinite Loop When Clearing EditText Fields on Text Change?

Android on Text Change Listener

この質問は、Text Change Listener を 2 つの EditText フィールドに適用するときに無限ループを防ぐ解決策を求めています。フィールド 1 とフィールド 2。 field1 のテキストが変更されると、field2 がクリアされ、その逆も同様です。

最初の実装では、TextWatchers を両方のフィールドにアタッチする必要があり、field1 のテキストが変更されると、field2 がクリアされ、その逆も同様でした。ただし、フィールドが相互に無期限に変更しようとするため、クラッシュが発生しました。

解決策:

無限ループを防ぐために、チェックを追加できます。 TextWatchers は、テキストが空でない場合 (つまり、長さが異なる場合) にのみ他のフィールドをクリアします。 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("");
   }
  });

このアプローチにより、field1 が変更されてテキストが含まれる場合、field2 が確実にクリアされます。同様に、フィールド 2 は、フィールド 1 のテキストが空でない場合にのみフィールド 1 をクリアします。したがって、目的の動作を実現しながら無限ループが回避されます。

以上がテキスト変更時に EditText フィールドをクリアするときに無限ループを防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。