2017-09-08 5 views
0

Je veux utiliser AutoCompleteTextView dans android et lire la documentation officielle developer.android à ce sujet.Je ne comprends pas Android AutoCompleteTextView Constructeur de ArrayAdapter

Il y a un extrait de code qui ressemble à:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_dropdown_item_1line, COUNTRIES); 
    AutoCompleteTextView textView = (AutoCompleteTextView) 
      findViewById(R.id.countries_list); 
    textView.setAdapter(adapter); 
} 

private static final String[] COUNTRIES = new String[] { 
    "Belgium", "France", "Italy", "Germany", "Spain" 
}; 

Je ne comprends pas ce que le second paramètre (android.R.layout.simple_dropdown_item_1line) dans le constructeur de moyens ArrayAdapter, d'où cela vient de?

Est-ce une mise en page disponible sur Android ou dois-je remplacer cette mise en page par une mise en page créée par moi-même et comment définir ce fichier de mise en page dans ce cas?

mes lokks code béton comme xml:

<AutoCompleteTextView 
     android:id="@+id/search" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

java:

AutoCompleteTextView search =(AutoCompleteTextView) findViewById(R.id.search); 
String[] vocabs = new String[1001]; 
//fill the String array 
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line ,vocabs); 
search.setAdapter(adapter); 
+1

pas besoin de le remplacer, il est la mise en page par défaut pour chaque ligne i n votre autocompleteview ou vous pouvez changer cela si vous avez besoin d'une mise en page personnalisée –

Répondre

1

Ils appellent le constructeur de ArrayAdapter avec 3 arguments (documentation): ArrayAdapter(Context context, int resource, T[] objects)

Les ressources R.layout.simple_dropdown_item_1line est juste un des efault mises en page de l'infrastructure android pour les listes déroulantes. Voir here une liste des autres mises en page par défaut.

EDIT pour répondre à votre 2ème question:

Vous pouvez utiliser la disposition par défaut Android (l'exemple que vous avez fourni devrait fonctionner) ou par une autre définie par vous. Si c'est ce dernier cas, alors il suffit de créer une mise en page XML pour cette mise en page:

layouts/dropdown_custom_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <TextView 
     android:id="@+id/vocab_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     tools:text="vocab"/> 
</LinearLayout> 

Ensuite, vous pouvez utiliser le constructeur ArrayAdapter ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) pointant vers votre mise en page personnalisée et à la TextView vous voulez être peuplé de Vocabs:

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.dropdown_custom_view, R.id.vocab_text ,vocabs); 
search.setAdapter(adapter); 

vérifiez également que vous peuplant le bien tableau vocabs.

+0

Merci! Mais je m'attendrais à obtenir une liste déroulante affichée lorsque j'entre les premiers caractères, mais rien ne se passe du tout ...Savez-vous ce qui pourrait être la raison de cette – Jonas1902

+1

Je viens d'essayer la démo sur une application de test et cela a bien fonctionné pour moi. Comment avez-vous implémenté la vue en XML? la mienne est la suivante: '' –

+0

J'ai ajouté l'implémentation xml et java aux questions – Jonas1902

0

Cette disposition qui est disponible dans les système Android qui est la raison pour laquelle vous utilisez android.R .it est utilisé pour montrer un élément de la adapter.It tableau est essentiellement un textview avec un certain style

0

Vous pouvez utiliser la mise en page personnalisée pour AutoCompleteTextView comme

ArrayAdapter<String> adapter = 
     new ArrayAdapter<String>(this, R.layout.custom_layout, R.id.text_title, COUNTRIES); 
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list); 
textView.setAdapter(adapter); 

custom_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#e4e4e4" 
    > 

    <TextView 
     android:id="@+id/text_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="marquee" 
     tools:text="AA" 
     android:padding="15dp" 
     /> 
</LinearLayout>