2017-09-08 6 views
0

Ich möchte AutoCompleteTextView in Android verwenden und lesen Sie die offizielle developer.android Dokumentation darüber.Ich verstehe nicht Android AutoCompleteTextView Konstruktor von ArrayAdapter

Es gibt einen Code-Schnipsel, die wie folgt aussieht:

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

Ich verstehe nicht, was der zweite Parameter (android.R.layout.simple_dropdown_item_1line) im Konstruktor von ArrayAdapter bedeutet, woher kommt diese kommen von?

Ist es ein Layout, das bei Android verfügbar ist, oder muss ich dieses Layout durch ein Layout ersetzen, das ich selbst erstellt habe, und wie kann ich diese Layoutdatei definieren?

Beton mein Code Lokks wie 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

keine Notwendigkeit, sie zu ersetzen, ist es das Standard-Layout für jede Zeile i n Ihre Autocompleteview oder Sie können dies ändern, wenn Sie ein benutzerdefiniertes Layout benötigen –

Antwort

1

Sie den Konstruktor von ArrayAdapter mit 3 Argumenten Aufruf (documentation): ArrayAdapter(Context context, int resource, T[] objects)

Die Ressource R.layout.simple_dropdown_item_1line ist nur eine der d Standard-Android-Framework-Layouts für Dropdown-Menüs. Eine Liste anderer Standardlayouts finden Sie unter here.

Sie entweder die Standard-Android-Layout verwenden, kann man von Ihnen definierten (das Beispiel Sie arbeiten vorgesehen sollte) oder eine benutzerdefinierte:

EDIT Ihre zweite Frage zu beantworten. Wenn es dieser letzte Fall ist, dann erstellen Sie einfach ein XML-Layout für dieses Layout:

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> 

Dann können Sie den ArrayAdapter Konstruktor ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) Ihr benutzerdefiniertes Layout zeigen und auf die Textview Sie wollen mit Vocabs gefüllt werden:

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

überprüfen Sie auch, dass Sie die vocabs Array gut sind bevölkern.

+0

Vielen Dank! Aber ich würde erwarten, dass eine Drop-down-Liste angezeigt wird, wenn ich die ersten paar Zeichen eintrage, aber überhaupt passiert nichts ...Weißt du, was könnte der Grund für diese – Jonas1902

+1

Ich habe gerade versucht, die Demo auf einer Test-App und es hat gut für mich gearbeitet. Wie hast du die Ansicht in XML implementiert? meins ist wie folgt: '' –

+0

Ich habe XML und Java-Implementierung zu den Fragen hinzugefügt – Jonas1902

0

Dieses Layout, die im Android-System zur Verfügung, dass der Grund, warum Sie android.R .Es Ilses wird verwendet, um ein Element aus dem Array adapter.It zu zeigen, ist im Grunde ein Textview mit einigem Styling

0

Sie das benutzerdefinierten Layout verwenden kann AutoCompleteTextView wie

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> 
Verwandte Themen