Ich habe ein EditText-Feld und setze einen OnFocusChangeListener dafür. Wenn der Fokus verloren gegangen ist, wird eine Methode aufgerufen, die den Wert des EditText mit einem in der Datenbank überprüft. Wenn der Rückgabewert der Methode wahr ist, wird ein Toast angezeigt und der Fokus sollte wieder auf den EditText gerichtet sein. Der Fokus sollte immer wieder auf den EditText gerichtet sein und die Tastatur sollte angezeigt werden, bis der Rückgabewert der Methode falsch ist.
BEARBEITEN: Ich denke, ich habe mein eigentliches Problem noch nicht klargestellt: Kein anderes Element auf dem Bildschirm sollte bearbeitet werden können, bis der Wert des EditText zu einem Wert bearbeitet wird, wodurch die Methode "checkLiganame (liganame)" erstellt wird. " falsch zurückgeben. Nur das EditText-Feld sollte bearbeitet werden können.
Hier ist mein Code (der bei mir nicht funktioniert):
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();
}
}
und die Methode:
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;
}
Dieser Code führt zu folgendem Ergebnis: Nachdem der EditText den Fokus verloren hat, springt der Fokus zurück zu EditText, aber ich kann den Text nicht mehr bearbeiten.
EDIT2: Mein Code wurde geändert. Szenario:
Ich klicke auf den ersten EditText und füge einen String ein, der sich bereits in der Datenbank befindet. Der Toast zeigt. Jetzt kann ich meinen String nicht mehr bearbeiten. Ich klicke auf der Tastatur auf "Weiter" und der Fokus bleibt auf dem ersten EditText. Ich versuche meinen String zu bearbeiten, aber es passiert nichts. Stattdessen wird mein neuer String im zweiten EditText angezeigt. Ich klicke auf den Zurückpfeil meines Geräts und klicke erneut auf den ersten und zweiten EditText -> keine Tastatur wird angezeigt.
Hier ist mein neuer 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();
}
}
}