Как сделать автофокус edittext после показа тоста?
У меня есть EditText, который читает 13-значный штрих-код. Что я хочу сделать, так это сохранить виртуальную клавиатуру, отображаемую на экране, и EditText, чтобы всегда иметь фокус. Следующий код позволяет мне написать штрих-код и искать продукт, когда нажата клавиша enter, и это хорошо работает. Но если я ввожу штрих-код с менее чем 13 цифрами или набранный штрих-код не существует в моей базе данных, я хочу показать пользователю тост, сообщив ему об этом. После показа тоста я хочу, чтобы редактируемый текст получил фокус снова автоматически, позволяя пользователю просто ввести штрих-код снова. После показа тоста я попробовал метод 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>
Заранее благодарю.
EDIT: возясь с этим, я нашел проблему. Вот решение:
return true;
Теперь это работает...
2 ответа:
Поместите этот код рядом с этим тостовым сообщением:
Это сработало для меня. Также необходимо удалить * procura_codbar.requestFocus (); * в нижней части кода.Toast.makeText(MainActivity.this, "type a 13 digit barcode", Toast.LENGTH_LONG).show(); procura_codbar.setFocusableInTouchMode(true); procura_codbar.setFocusable(true); procura_codbar.requestFocus(); procura_codbar.setSelection(codbar.length());
Я смог только вернуть фокус к
EditText
, задержавшись на мгновение перед вызовом методаrequestFocus()
:final Handler handler = new Handler(); final EditText myEditText = (EditText) findViewById(R.id.editText1); myEditText.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // See if user presses enter if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) { Toast.makeText(MainActivity.this, "You pressed enter!", Toast.LENGTH_SHORT).show(); // Put focus back in the EditText after brief delay handler.postDelayed(new Runnable() { @Override public void run() { myEditText.requestFocus(); // Select all text myEditText.setSelection(0, myEditText.getText().length()); } }, 200); return true; } return false; } });