在文本更改侦听器上的android我有一种情况,那里有两个领域。field1和field2。改变后我想做的就是空的field2,field1反之亦然。所以最后只有一个字段有内容。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等等......有人建议任何解决方案?
3 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
您可以添加检查以仅清除字段中的文本不为空时(即长度不是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
这里的文档。
另外请尊重命名约定。
翻阅古今
TA贡献1780条经验 获得超5个赞
我知道这已经过时了,但总有一天会有人再遇到这个问题。
我有一个类似的问题,我会在EditText上调用setText,当我不想要它时会调用onTextChanged。我的第一个解决方案是在调用setText()之后编写一些代码以撤消侦听器所造成的损坏。但那并不是很优雅。在做了一些研究和测试后,我发现使用getText()。clear()以与setText(“”)大致相同的方式清除文本,但由于它没有设置文本,因此不调用监听器,因此解决了我的问题。我将所有的setText(“”)调用切换到getText()。clear(),我不再需要绷带了,所以也许这也可以解决你的问题。
试试这个:
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.getText().clear(); } });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.getText().clear(); } });
RISEBY
TA贡献1856条经验 获得超5个赞
如果您使用Kotlin进行Android开发,那么您可以TextChangedListener()
使用以下代码添加:
myTextField.addTextChangedListener(object : TextWatcher{ override fun afterTextChanged(s: Editable?) {} override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} })
添加回答
举报
0/150
提交
取消