EditText、OnKeyListener 或 TextWatcher(条形码扫描)
我正在使用条形码扫描仪,它将条形码字符串以“12345\n”格式插入到 EditText 中。我不想使用搜索按钮,而是想通过“\n”字符触发搜索事件。我使用了 TextEdit 的 addTextChangedListener 并在该函数中执行了以下操作:
protected TextWatcher readBarcode = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
char lastCharacter = s.charAt(s.length() - 1);
if (lastCharacter == '\n') {
String barcode = s.subSequence(0, s.length() - 1).toString();
searchBarcode(barcode);
}
}
};
它第一次运行得很好,但我也想在每次扫描后清除 EditText。但不可能在 afterTextChanged 事件中执行此操作,因为它会进入递归循环或其他内容。
这是另一个解决方案,效果很好:
editBarcode.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
String barcode = editBarcode.getText().toString();
if (keyCode == KeyEvent.KEYCODE_ENTER && barcode.length() > 0) {
editBarcode.setText("");
searchBarcode(barcode);
return true;
}
return false;
}
});
实际上我不确定什么是正确的方法。也许我可以使用 EditText 的 OnKeyListener 事件。有什么建议吗?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您清除
afterTextChanged()
中的EditText
内容,则不应出现无限循环。If you clear the
EditText
content in theafterTextChanged()
, you shouldn't have an infinite loop.@Hrk 的代码对我不起作用,因为方法
myEditText.setString()
不存在。这是一种方法:
Code of @Hrk does not work for me, because method
myEditText.setString()
does not exist.Here is one way: