机器人在文本更改监听器

2022-08-31 04:57:35

我有一个情况,有两个领域。 和。我想做的就是在更改时为空,反之亦然。所以最后只有一个字段上有内容。field1field2field2field1

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

如果我仅附加到,它可以正常工作,但是当我对这两个字段执行此操作时,应用程序崩溃了。显然是因为他们试图无限期地改变彼此。一旦更改,它清除此时此刻就已更改,因此它将清除等等...addTextChangedListenerfield1field1field2field2field1

有人可以提出任何解决方案吗?


答案 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

另外,请遵守命名约定


答案 2

Kotlin 中,只需使用 KTX 扩展函数:(它使用 TextWatcher

yourEditText.doOnTextChanged { text, start, count, after -> 
        // action which will be invoked when the text is changing
    }


进口:core-KTX

implementation "androidx.core:core-ktx:1.2.0"

推荐