2011-04-16 3 views
2

J'utilise un AutoCompleteTextView dans mon code et charge la liste de la base de données en utilisant SimpleCursorAdapter.android autocompletetextview ne devrait afficher que les options pertinentes dans le menu déroulant

AutoCompleteTextView cocktailIngredientView = (AutoCompleteTextView) findViewById(R.id.item); 
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_spinner_item, mCursor, 
       new String[] { "field" }, 
       new int[] { android.R.id.text1 }); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
cocktailIngredientView.setAdapter(adapter); 
cocktailIngredientView.setThreshold(0); 

Il renseigne correctement la liste mais j'ai deux questions: 1. Je veux que cette liste à trier 2. Tout ce que je rentre, il affiche la liste complète. Je veux qu'il filtre en fonction des motifs correspondants dans la liste. par exemple. si la liste contient des valeurs Page, Outils ... alors si j'entre T dans la boîte, le menu déroulant devrait montrer seulement les outils. L'idée est d'afficher les options qui contiennent le modèle entré n'importe où dans le texte de la chaîne.

Comment cela peut-il être fait? S'il vous plaît aider.

Cordialement, Sapan

+0

En outre, lorsque je sélectionne un élément dans la liste déroulante il montre android.database.sqlite ... – Sapan

Répondre

4

vous devez dire l'adaptateur quels éléments à afficher. J'ai essayé d'implémenter quelque chose de similaire en utilisant un FilterQueryProvider qui interroge la base de données pour les éléments que je veux afficher dans la liste déroulante.

FilterQueryProvider filter = new FilterQueryProvider() { 

    @Override 
    public Cursor runQuery(CharSequence constraint) { 
     // Make a DB query that filters based on the constraint 

     return //whatever query results; 
    } 
}; 
myAdapter.setFilterQueryProvider(filter); 

En ce qui concerne la situation lorsque vous sélectionnez un élément dans la liste, vous devez remplacer le CursorToStringConverter du SimpleCursorAdapter. Quelque chose comme:

SimpleCursorAdapter.CursorToStringConverter conv = new SimpleCursorAdapter.CursorToStringConverter() { 

    @Override 
    public CharSequence convertToString(Cursor cursor) { 
     int numCol = cursor.getColumnIndexOrThrow("whateverFieldYouNeed"); 
     String term = cursor.getString(numCol); 
     return term; 
    } 
}; 
myAdapter.setCursorToStringConverter(conv); 
+0

Merci pour la réponse. Cela a vraiment fonctionné pour moi.Mais en utilisant le fournisseur de filtre de la police, une chose que j'ai observée est que le dernier élément de la liste filtrée n'apparaît pas complètement. Je vois une barre de défilement, et pour l'afficher complètement, je dois faire défiler vers le bas. Il est par défaut visible seulement la moitié. – Sapan

+0

Essayez de jouer avec la méthode 'setDropDownHeight()' [1] pour ajuster le nombre d'éléments visibles dans le menu déroulant. [1] http://developer.android.com/reference/android/widget/AutoCompleteTextView.html#setDropDownHeight(int) – Zarah

0

Au lieu de CursorToStringConverter vous pouvez également utiliser

mAdapter.setStringConversionColumn(mCursor.getColumnIndexOrThrow("whateverFieldYouNeed")); 
Questions connexes