13 桁のバーコードを読み取る EditText があります。私がやりたいことは、仮想キーボードを画面に表示したままにし、EditText に常にフォーカスを当てることです。次のコードでは、Enter キーが押されたときにバーコードを書き込み、製品を検索することができ、うまく機能します。しかし、13 桁未満のバーコードを入力した場合、または入力したバーコードがデータベースに存在しない場合は、ユーザーにトーストを表示して、そのことを知らせたいと思います。Toast を表示した後、EditText が再び自動的にフォーカスされるようにして、ユーザーがバーコードをもう一度入力できるようにします。トーストを表示した後、 requestFocus() メソッドを試しましたが、うまくいきませんでした。ソフト キーボードは常に表示されますが、トーストの後、EditText に触れない限り、EditText を再度入力することはできません。これどうやってするの?
final EditText procura_codbar = (EditText)
findViewById(R.id.procurar_produto_codbar);
procura_codbar.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
String codbar = procura_codbar.getText().toString();
if (codbar.length()<13){
Toast.makeText(MainActivity.this,
"type a 13 digit barcode",
Toast.LENGTH_LONG).show();
}
else{
if (bdh!=null){
bdh.closedb(); bdh.close();
}
bdh = new DBHelper(MainActivity.this);
Log.i("CODBAR", codbar);
produto prod_ = bdh.getProduto(codbar);
if (prod_!=null){
showDialogPreco(prod_);
procura_codbar.setText("");
}else{
Toast.makeText(MainActivity.this,
"Product not found",
Toast.LENGTH_SHORT).show();
procura_codbar.setSelection(codbar.length());
}
}
procura_codbar.requestFocus();
procura_codbar.setSelection(codbar.length());
}
return false;
}
});
XML は次のとおりです。
<EditText
android:id="@+id/procurar_produto_codbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:inputType="textNoSuggestions|number"
android:textSize="22sp"
android:maxLength="13"
android:layout_toRightOf="@+id/tv_procura_codbar" >
<requestFocus />
</EditText>
前もって感謝します。
編集:これをいじって、問題を見つけました。解決策は次のとおりです。
return true;
今それは動作します...