7

Ich habe eine DialogFragment, die AutoCompleteTextView und Cancel und OK Tasten enthält.AutoCompleteTextView erlaubt nur die vorgeschlagenen Optionen

Die AutoCompleteTextView gibt Vorschläge von Benutzernamen, die ich vom Server bekomme.

Was ich tun möchte ist, den Benutzer einzuschränken, nur vorhandene Benutzernamen eingeben zu können.

Ich weiß, ich kann überprüfen, ob dieser Benutzername existiert, wenn der Benutzer auf OK klickt, aber gibt es eine andere Möglichkeit, lassen Sie uns sagen, nicht zulassen, dass der Benutzer Zeichen eingeben, wenn es keinen solchen Benutzernamen existiert. Ich weiß nicht, wie ich das machen soll, weil ich bei jedem eingegebenen Charakter nur bis zu 5 Vorschläge bekomme. Der Server ist auf diese Weise implementiert.

Alle Vorschläge sind willkommen. Danke

+0

Verwenden Sie Spinner stattdessen ... – Selvin

+1

@Selvin Ich kann Spinner nicht verwenden, da es eine Menge von Benutzernamen gibt, und der Client möchte AutoVervollständigen Textansicht haben. Vielen Dank für Ihren Vorschlag – nikmin

+0

Wie wäre es mit Listenansicht mit Suchoption? –

Antwort

10

ich nicht diese geeignetere Lösung dann finden könnte:

Zuhörer

Ich habe diesen Fokusänderung

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."); 
       }; 
      } 
     } 
}); 

Wenn das Verfahren getAllItems() die ArrayList kehrt mit den Vorschlägen.

Also, wenn ich einen Benutzernamen eingeben, und dann in ein anderes Feld verschieben, wird dieser Listener ausgelöst und es überprüft, ob die Vorschlagsliste nicht leer ist und ob der eingegebene Benutzername in dieser Liste ist. Wenn die Bedingung nicht erfüllt ist, wird ein Fehler angezeigt.

Auch habe ich die gleiche Prüfung auf OK Schaltfläche klicken:

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; 
} 

Wenn also die AutoComplete Ansicht noch fokussiert ist, wird die Fehlerprüfung erneut durchgeführt.

+0

Was ist 'UsersAutoCompleteAdapter'? –

+0

@Wizard Es ist mein benutzerdefiniertes ListAdapter, das ich für die AutocompleteTextView verwende. Das ist nur der Name des Adapters. – nikmin

+0

ok danke ........... –