non riuscivo a trovare la soluzione più idonea, allora questo:
ho aggiunto questa attenzione cambiamento ascoltatore
actName.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
ArrayList<String> results =
((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems();
if (results.size() == 0 ||
results.indexOf(actName.getText().toString()) == -1) {
actName.setError("Invalid username.");
};
}
}
});
Dove il metodo restituisce il getAllItems()
ArrayList
contenente i suggerimenti.
Così quando inserisco un nome utente, e poi mi sposto in un altro campo, questo ascoltatore viene attivato e controlla se l'elenco dei suggerimenti non è vuoto e se il nome utente inserito è in tale elenco. Se la condizione non è soddisfatta, viene visualizzato un errore.
anche io ho lo stesso controllo sul OK
scatto del tasto:
private boolean checkErrors() {
ArrayList<String> usernameResults =
((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems();
if (actName.getText().toString().isEmpty()) {
actName.setError("Please enter a username.");
return true;
} else if (usernameResults.size() == 0 || usernameResults.indexOf(actName.getText().toString()) == -1) {
actName.setError("Invalid username.");
return true;
}
return false;
}
Quindi, se la vista AutoComplete
è ancora focalizzata, il controllo degli errori è fatto di nuovo.
Utilizzare invece Spinner ... – Selvin
@Selvin Non riesco a utilizzare lo spinner perché ci sono molti nomi utente e il client desidera avere una visualizzazione testo a completamento automatico. Grazie per il tuo suggerimento – nikmin
per quanto riguarda la visualizzazione elenco con l'opzione di ricerca? –