我不明白ArrayAdapter的Android AutoCompleteTextView构造函数

时间:2017-09-08 08:46:13

标签: java android android-arrayadapter

我想在android中使用AutoCompleteTextView并阅读有关它的官方developer.android文档。

有一个代码片段,如下所示:

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

我不明白ArrayAdapter的构造函数中的第二个参数(android.R.layout.simple_dropdown_item_1line)是什么意思,它来自哪里?

它是一个可以从Android获得的布局还是我必须用我自己创建的布局替换这个布局,以及在这种情况下如何定义这个布局文件?

具体我的代码lokks喜欢 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);

3 个答案:

答案 0 :(得分:1)

他们使用3个参数(documentation)调用ArrayAdapter的构造函数:ArrayAdapter(Context context, int resource, T[] objects)

资源 R.layout.simple_dropdown_item_1line 只是下拉列表的默认Android框架布局之一。请参阅here其他默认布局列表。

编辑回答您的第二个问题

您可以使用默认的Android布局(您提供的示例应该可以使用)或您定义的自定义布局。如果是最后一种情况,那么只需为此布局创建一个xml布局:

<强>布局/ 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>

然后你可以使用指向你的自定义布局的ArrayAdapter构造函数ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)和你想用vocabs填充的TextView:

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

同时检查您是否填充了vocabs数组。

答案 1 :(得分:0)

这个布局在Android系统中可用,这是您使用android.R的原因。它用于显示数组适配器中的项目。它基本上是带有一些样式的文本视图

答案 2 :(得分:0)

您可以使用AutoCompleteTextView的自定义布局,例如

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>