7

Ho un DialogFragment che contiene i tasti AutoCompleteTextView e Cancel e OK.AutoCompleteTextView consente solo le opzioni suggerite

Il AutoCompleteTextView sta dando suggerimenti di nomi utente che sto ricevendo dal server.

Quello che voglio fare è limitare l'utente per poter inserire solo i nomi utente esistenti.

So che posso controllare se quel nome utente esiste quando l'utente fa clic su OK, ma c'è un altro modo, diciamo che non consente all'utente di inserire il carattere se non esiste tale nome utente. Non so come farlo perché su ogni personaggio inserito ricevo solo 5 suggerimenti. Il server è implementato in questo modo.

Qualsiasi suggerimento è benvenuto. Grazie

+0

Utilizzare invece Spinner ... – Selvin

+1

@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

+0

per quanto riguarda la visualizzazione elenco con l'opzione di ricerca? –

risposta

10

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.

+0

cos'è 'UsersAutoCompleteAdapter'? –

+0

@Wizard È il mio ListAdapter personalizzato che utilizzo per AutocompleteTextView. Questo è solo il nome dell'adattatore. – nikmin

+0

ok grazie ........... –