我正在使用条形码扫描器,以此格式“12345 \ n”将条形码字符串插入到EditText中。我想通过“\ n”字符来触发搜索事件,而不是使用搜索按钮。我用文本编辑的addTextChangedListener和函数中我做:EditText,OnKeyListener或TextWatcher(条码扫描)
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事件。有什么建议么?
感谢
你在哪里清除文本?你的第一个解决方案以无限循环结束?尝试在如果检查最后一个字符的情况下清除它。如果你在那里做,它应该工作我猜。 (原因:linebreak只会在第一次被调用时才会出现,因为清除后会再次被调用,因此不会在那里) – 2010-11-11 06:33:23
您如何使用@Override for onKey()。这不是一个抽象的方法吗?所以它不应该需要@覆盖..正确? – faizal 2013-12-17 16:28:15