我正在使用條形碼掃描器,以此格式「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