2012-12-03 3 views
1

J'utilise AutoCompleteTextView avec une disposition personnalisée pour l'adaptateur. Le problème est que je ne sais pas comment limiter les résultats pour un seul à la fois, comme dans la mise en page par défaut. J'ai lu qu'il est possible de limiter la hauteur, mais ne fonctionne pas dans tous les écrans. Merci de votre attention. Je l'ai sur ma présentation activity_main.Limite AutoCompleteTextView à un seul résultat

<AutoCompleteTextView android:id="@+id/autotext" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 
android:minWidth="480dp" 
android:layout_weight="1" 
android:maxLength="23" 
android:maxLines="1" 
android:textColor="#000000" /> 

Et c'est la disposition de l'adaptateur.

<TextView android:id="@+id/textpop" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#000000" 
android:textSize="17sp"/> 
+0

Utilisez-vous un adaptateur personnalisé? – Luksprog

+0

Je n'utilise pas un adaptateur personnalisé exactement, en fait j'utilise une disposition personnalisée sur l'ArrayAdapter, qui a seulement la textview qui apparaît dans le code de la demande. – jramirez

+1

Je suppose qu'en * limitant les résultats pour seulement un à la fois * vous voulez dire ne montrer qu'une suggestion, peu importe combien remplissent le texte automatique complet. Si c'est le cas, vous pouvez implémenter votre propre adaptateur qui ne montre qu'une seule suggestion, quoi qu'il arrive. – Luksprog

Répondre

1

Regardez this code. C'est fondamentalement le code pour la classe SDK ArrayAdapter avec une petite modification (qui ne compte pas). Si vous voulez montrer une seule suggestion dans le AutoCompleteTextView alors vous pouvez faire une petite modification à la classe du lien, la méthode performFiltering() comme ceci:

// ... the rest of that method 
if (newValues.size() > 1) { // if we have more than an item in the list 
    // get the first suggestion 
    T oneItem = newValues.get(0); 
    // empty the suggestion list 
    newValues.clear(); 
    // add the only suggestion. 
    newValues.add(oneItem); 
} 
results.values = newValues; 
results.count = newValues.size(); 
0

Je trouve la réponse ci-dessus insatisfaisante, et le lien est mort.

Pour la façon de faire simple, créez un adaptateur personnalisé et forcer simplement le compte à 1

class SingleArrayAdapter extends ArrayAdapter<String> { 

     public SingleArrayAdapter(Context context, int resource, String[] objects) { 
      super(context, resource, objects); 
     } 

     @Override 
     public int getCount() { 
      return 1; 
     } 
    } 
0

Vous pouvez créer votre propre adaptateur AutoCompleteTextView qui mettent en œuvre l'interface filtrables, ou étendre l'adaptateur existant, mais passer outre getFilter() méthode, créez votre propre implémentation de filtre, puis vous pouvez personnaliser la logique de filtrage et renvoyer autant de résultats que vous le souhaitez.

Vous pouvez vous référer à l'implémentation de ArrayFilter dans ArrayAdpater pour référence.

Questions connexes