J'ai un champ EditText et j'ai défini un OnFocusChangeListener pour cela. Lorsqu'il a perdu le focus, une méthode est appelée, qui vérifie la valeur de EditText avec un dans la base de données. Si la valeur de retour de la méthode est true, un toast est affiché et le focus doit revenir à nouveau sur EditText. Le focus doit toujours revenir sur EditText et le clavier doit s'afficher, jusqu'à ce que la valeur de retour de la méthode soit false.
EDIT: Je pense que je n'ai pas encore clarifié mon vrai problème: aucun autre élément à l'écran ne devrait pouvoir être modifié, jusqu'à ce que la valeur de EditText soit modifiée en une valeur, ce qui rend la méthode "checkLiganame (liganame) "retourne faux. Seul le champ EditText doit être modifiable.
voici mon code (qui ne fonctionne pas pour moi):
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();
}
}
et la méthode:
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;
}
Ce code conduit au résultat suivant: Une fois que le EditText a perdu le focus, le focus revient à EditText, mais je ne peux plus modifier le texte.
EDIT2: J'ai changé mon code. Scénario:
Je clique sur le premier EditText et y mets une chaîne, qui est déjà dans la base de données. Le toast montre. Maintenant, je ne peux plus modifier ma chaîne. Je clique sur "suivant" sur le clavier et le focus reste sur le premier EditText. J'essaye de modifier ma chaîne, mais rien ne se passe. Au lieu de cela, ma nouvelle chaîne s'affiche dans le deuxième EditText. Je clique sur la flèche arrière de mon appareil et reclique sur le premier et le deuxième EditText -> aucun clavier ne s'affiche.
Voici mon nouveau code:
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();
}
}
}