У меня есть поле EditText и установить для него OnFocusChangeListener. Когда он потерял фокус, вызывается метод, который проверяет значение EditText с единицей в базе данных. Если возвращаемое значение метода равно true, отображается тост, и фокус должен снова вернуться к EditText. Фокус должен всегда возвращаться к EditText, и клавиатура должна отображаться, пока возвращаемое значение метода не станет ложным.
РЕДАКТИРОВАТЬ: я думаю, я еще не до конца разъяснил свою реальную проблему: ни один другой элемент на экране не может быть в состоянии редактировать, пока значение EditText не будет отредактировано до значения, что делает метод "checkLiganame (liganame)" "вернуть ложь. Только поле EditText должно быть редактируемым.
вот мой код (который не работает для меня):
final EditText Liganame = (EditText) findViewById(R.id.liganame);
Liganame.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
String liganame = Liganame.getText().toString();
if (checkLiganame(liganame)) {
Toast toast = Toast.makeText(CreateTableActivity.this,
"Dieser Liganame ist bereits vergeben",
Toast.LENGTH_SHORT);
toast.show();
Liganame.requestFocus();
}
}
и метод:
public boolean checkLiganame(String liganame) {
boolean found = false;
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query("liga", new String[] { "liganame" },
"liganame = '" + liganame + "'", null, null, null, null);
Log.i("Liganame: ", String.valueOf(cursor));
db.close();
if (cursor != null) {
found = true;
}
return found;
}
Этот код приводит к следующему результату: после того, как EditText потерял фокус, фокус возвращается к EditText, но я больше не могу редактировать текст.
EDIT2: изменил мой код. Сценарий:
Я нажимаю на первый EditText и помещаю в него строку, которая уже есть в базе данных. Тост показывает. Теперь я больше не могу редактировать свою строку. Я нажимаю «Далее» на клавиатуре, и фокус остается на первом EditText. Я пытаюсь отредактировать свою строку, но ничего не происходит. Вместо этого моя новая строка отображается во втором EditText. Я нажимаю стрелку назад на моем устройстве и нажимаю на первый и второй EditText -> клавиатура не отображается.
Вот мой новый код:
public class CreateTableActivity extends Activity implements
OnFocusChangeListener {
private EditText Liganame, Mannschaftsanzahl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_league);
Liganame = (EditText) findViewById(R.id.liganame);
Liganame.setOnFocusChangeListener(this);
Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl);
Mannschaftsanzahl.setOnFocusChangeListener(this);
final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button);
OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
ButtonClick();
}
};
save_button.setOnClickListener(mCorkyListener);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
String liganame = Liganame.getText().toString();
if (checkLiganame(liganame)) {
if (Liganame.requestFocus()) {
getWindow()
.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Mannschaftsanzahl.clearFocus();
Toast.makeText(CreateTableActivity.this,
"Dieser Liganame ist bereits vergeben",
Toast.LENGTH_SHORT).show();
}
}
}