Eu tenho um campo EditText e defino um OnFocusChangeListener para ele. Quando ele perde o foco, um método é chamado, que verifica o valor do EditText com um no banco de dados. Se o valor de retorno do método for verdadeiro, um brinde é mostrado e o foco deve voltar ao EditText novamente. O foco sempre deve voltar ao EditText e o teclado deve aparecer, até que o valor de retorno do método seja falso.
EDIT: Acho que ainda não esclareci meu problema real: nenhum outro item na tela deve ser capaz de editar, até que o valor do EditText seja editado em um valor, o que torna o método "checkLiganame (liganame) " retorna falso. Somente o campo EditText deve ser editável.
Aqui está o meu código (que não funciona para mim):
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();
}
}
e o 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;
}
Esse código leva ao seguinte resultado: Depois que o EditText perdeu o foco, o foco volta para o EditText, mas não consigo mais editar o texto.
EDIT2: Mudei meu código. Cenário:
Clico no primeiro EditText e coloco uma String, que já está no banco de dados. A torrada está aparecendo. Agora não posso mais editar minha String. Clico em "Avançar" no teclado e o foco permanece no primeiro EditText. Eu tento editar minha String, mas nada acontece. Em vez disso, minha nova String está aparecendo no segundo EditText. Clico na seta para trás do meu dispositivo e clico novamente no primeiro e no segundo EditText -> nenhum teclado está sendo exibido.
Aqui está o meu novo 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();
}
}
}