2012-03-10 1 views
2

Dans Android AutoCompleteTextView afficher uniquement la liste déroulante d'affichage lorsque nous avons entré la première lettre correctement. Ce que je veux, c'est quand j'entre une séquence de lettres dans la chaîne disponible, il doit afficher la liste déroulante. Par exemple "Janvier" est dans mon tableau donc quand j'entre "anu" dans le champ de saisie semi-automatique, il devrait montrer "janvier" dans le menu déroulant.Veuillez aider. MerciAutoCompleteTextView dans android

+0

Je suis en train de faire quelque chose de similaire ICI !!! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

Répondre

1

Vous allez probablement avoir votre propre Filter et l'attacher via un TextWatcher. Cette réponse a un exemple de regex dans un AutoCompleteTextView: Android AutoCompleteTextView with Regular Expression? et voici une autre regex/java exemple: How can I perform a partial match with java.util.regex.*?

EDIT: Vous devez étendre ArrayAdapter afin de passer outre getFilter() et retourner votre filtre personnalisé.

Vous allez donc avoir quelque chose comme ceci:

autoCompleteTextView.setAdapter(arrayAdapter); 
autoCompleteTextView.addTextChangedListener(new TextWatcher() { 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     arrayAdapter.getFilter().filter(s); 
    } 
}); 

public class RegexFilter extends Filter{ 

    ArrayAdapter<String> mAdapter; 
    public RegexFilter(ArrayAdapter<String> adapter) { 
     mAdapter = adapter; 
    } 
... 
    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     Pattern p = Pattern.compile(constraint); 
     Matcher m = p.matcher(""); 
     List listOfMatches = new ArrayList<String>(); 
     for (String curMonth : months) { 
     m.reset(curMonth); 
     if (m.matches || m.hitEnd()) { 
      listOfMatches.add(curMonth); 
     } 
     } 
     FilterResults results = new FilterResults(); 
     results.values = listOfMatches; 
     results.count = listOfMatches.size(); 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     mAdapter.addAll(results.values); 
     mAdapter.notifyDataSetChanged(); 
    } 
} 

public class PartialArrayAdapter extends ArrayAdapter<String> { 
    ... 
    RegexFilter mFilter; 
    @Override 
    public TimedSuggestionFilter getFilter() { 
     if(null == mFilter) 
     mFilter = new RegexFilter(this); 
     return mFilter; 
    } 
+0

Désolé mais je ne suis pas capable de trouver les fonctions setFilter() et getFilter() dans AutoCompleteTextView Class.my android Niveau de l'API est 8 – pyus13

+0

@ pyus13 édité mon code. Désolé, la fonction getFilter() est dans ArrayAdapter. Je recommande de faire un exemple ArrayAdapter (peut-être comme celui-ci: http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications). Les adaptateurs sont une partie importante d'Android ... –