Ho un campo EditText e ho impostato un OnFocusChangeListener per questo. Quando ha perso il focus, viene chiamato un metodo che controlla il valore di EditText con uno nel database. Se il valore restituito del metodo è true, viene visualizzato un brindisi e lo stato attivo dovrebbe tornare nuovamente sul EditText. Il focus dovrebbe sempre tornare su EditText e la tastiera dovrebbe mostrare, fino a quando il valore di ritorno del metodo è falso.
EDIT: penso, non ho ancora chiarito perfettamente il mio vero problema: nessun altro elemento sullo schermo dovrebbe essere in grado di modificare, fino a quando il valore di EditText non viene modificato in un valore, il che rende il metodo "checkLiganame (liganame) "restituisci falso. Solo il campo EditText dovrebbe essere modificabile.
ecco il mio codice (che non funziona per me):
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 il metodo:
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;
}
Questo codice porta al seguente risultato: Dopo che EditText ha perso il focus, il focus torna a EditText, ma non riesco più a modificare il testo.
EDIT2: modificato il mio codice. Scenario:
Faccio clic sul primo EditText e inserisco una stringa, che è già nel database. Il brindisi sta mostrando. Ora non posso più modificare la mia stringa. Faccio clic su "Avanti" sulla tastiera e lo stato attivo rimane sul primo EditText. Provo a modificare la mia stringa, ma non succede nulla. Invece la mia nuova stringa viene mostrata nel secondo EditText. Faccio clic sulla freccia indietro del mio dispositivo e faccio clic sul primo e sul secondo EditText -> nessuna tastiera viene visualizzata.
Ecco il mio nuovo codice:
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();
}
}
}