我有一个可以读取 13 位条形码的 EditText。我想要做的是保持屏幕上显示的虚拟键盘和 EditText 始终具有焦点。以下代码让我在按下回车键时编写条形码并搜索产品,效果很好。但是,如果我输入的条形码少于 13 位,或者输入的条形码在我的数据库中不存在,我想向用户展示一个 Toast,并通知他。显示 Toast 后,我希望 EditText 再次自动获得焦点,让用户再次键入条形码。在展示了 Toast 之后,我尝试了 requestFocus() 方法,但它不起作用。始终显示软键盘,但在 Toast 之后,除非我触摸 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;
现在它工作...