4

バーコード文字列を「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 イベントを使用できます。助言がありますか?

ありがとう

4

2 に答える 2

5

EditTextのコンテンツをクリアするafterTextChanged()と、無限ループになることはありません。

 @Override 
 public void afterTextChanged(Editable s) { 
  if (s.length > 0) {

      char lastCharacter = s.charAt(s.length() - 1); 

      if (lastCharacter == '\n') { 
       String barcode = s.subSequence(0, s.length() - 1).toString();
       myEditText.setString("");
       searchBarcode(barcode); 
      }
  } 
于 2010-11-11T22:33:06.873 に答える
4

メソッドが存在しないため、@Hrkのコードは機能しませんmyEditText.setString()

1 つの方法を次に示します。

editText.addTextChangedListener(new TextWatcher() {

  ...

  @Override
  public void afterTextChanged(Editable s) {
    if (s.toString().trim().length() == 0)
      return;

    //do your work, then clear the text here
    s.clear();
  }
});
于 2011-11-17T11:15:00.000 に答える