我有一个情况,有两个领域。Field1和field2。我想要的
当field1被改变时,要做的是空field2,反之亦然。所以只有在最后
一个字段上有内容。
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,以此类推……
谁能给点建议吗?
您可以添加一个检查,只在字段中的文本不为空时清除(即当长度不等于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的文档。
另外,请尊重命名约定。
我写了自己的扩展,对我很有帮助。(芬兰湾的科特林)
你可以这样写:
editText.customAfterTextChanged { editable ->
//You have accessed the editable object.
}
我的分机号:
fun EditText.customAfterTextChanged(action: (Editable?)-> Unit){
this.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable?) {
action(editable)
}
})}
你用这个
我已经提供了textchangelistner的最新方法
edMsg.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (i2 == 0){
////Edit text blanked
}
String msg = charSequence.toString();/// your text on changed in edit text
}
@Override
public void afterTextChanged(Editable editable) {
}
});