1. ホーム

[解決済み】androidのテキスト変更リスナーについて

2022-03-26 23:45:24

質問

私は、2つのフィールドがある状況を持っています。 field1field2 . 私が欲しいのは を空にすることです。 field2 いつ field1 が変更され、その逆も同様です。そのため、最終的には の1つのフィールドにコンテンツがあります。

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("");
   }
  });

を付けると正常に動作します。 addTextChangedListenerfield1 のみですが 両方のフィールドに対して行うと、アプリがクラッシュしてしまいます。明らかに、両者が変更しようとするためです。 というように、互いに無制限に影響し合う。一度 field1 が変更されると、それがクリアされ field2 今この瞬間 field2 をクリアするように変更されます。 field1 といった具合に...。

どなたか解決策をご提案いただけませんか?

どのように解決するのですか?

フィールドのテキストが空でないとき(つまり長さが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 ここで .

また、以下を尊重してください。 命名規則 .