Tengo un EditText-Field y configuro un OnFocusChangeListener para ello. Cuando ha perdido el foco, se llama a un método que verifica el valor de EditText con uno en la base de datos. Si el valor de retorno del método es verdadero, se muestra un brindis y el foco debe volver al EditText nuevamente. El foco siempre debe volver al EditText y el teclado debe mostrar, hasta que el valor de retorno del método sea falso.
EDITAR: creo que todavía no he aclarado mi problema real: ningún otro elemento en la pantalla debería poder editarse, hasta que el valor de EditText se edite en un valor, lo que hace que el método "checkLiganame (liganame) " falso retorno. Solo el campo EditText debe ser editable.
Aquí está mi código (que no funciona para mí):
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();
}
}
y el método:
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;
}
Este código conduce al siguiente resultado: después de que EditText ha perdido el foco, el foco vuelve a EditText, pero ya no puedo editar el texto.
EDIT2: Cambié mi código. Guión:
Hago clic en el primer EditText y pongo una Cadena, que ya está en la base de datos. El brindis está mostrando. Ahora ya no puedo editar mi cadena. Hago clic en "siguiente" en el teclado y el foco permanece en el primer EditText. Intento editar mi cadena, pero no pasa nada. En cambio, mi nueva cadena se muestra en el segundo EditText. Hago clic en la flecha hacia atrás de mi dispositivo y vuelvo a hacer clic en el primer y segundo EditText -> no se muestra ningún teclado.
Aquí está mi nuevo código:
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();
}
}
}