无法将文本视图中的名称从预定义数组添加到AutoCompleteTextView

问题描述 投票:0回答:1

我正在尝试学习如何在Android中使用AutoCompleteTextView。我在一些教程的指导下编写了下面的代码。

main activity.Java

public class MainActivity extends Activity {

AutoCompleteTextView atc;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    atc = (AutoCompleteTextView)findViewById(R.id.actv);

    String[] titles = getResources().getStringArray(R.array.Names);
    ArrayAdapter adapter = new ArrayAdapter(this,R.layout.activity_main,titles);        
    atc.setAdapter(adapter);    }

}

activity_main.xml中

<RelativeLayout
    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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Auto Complete Text" />

<AutoCompleteTextView
    android:id="@+id/actv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="29dp"
    android:layout_marginTop="56dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:ems="10" >

    <requestFocus />
</AutoCompleteTextView>

在尝试添加文本时,在键入和光标移动时不会显示。如果我持有TextView它显示我输入的内容。

注意::如果我从预定义的数组中键入任何字符串,应用程序将崩溃,并出现以下异常。

04-17 00:50:59.510: E/AndroidRuntime(13732): FATAL EXCEPTION: main
04-17 00:50:59.510: E/AndroidRuntime(13732): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.AbsListView.obtainView(AbsListView.java:1464)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.AutoCompleteTextView$DropDownListView.obtainView(AutoCompleteTextView.java:1582)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1264)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.AutoCompleteTextView.buildDropDown(AutoCompleteTextView.java:1396)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1160)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:1042)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:1025)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.os.Looper.loop(Looper.java:130)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.app.ActivityThread.main(ActivityThread.java:3687)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at java.lang.reflect.Method.invoke(Method.java:507)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
04-17 00:50:59.510: E/AndroidRuntime(13732):    at dalvik.system.NativeStart.main(Native Method)
04-17 00:50:59.510: E/AndroidRuntime(13732): Caused by: java.lang.ClassCastException: android.widget.RelativeLayout
04-17 00:50:59.510: E/AndroidRuntime(13732):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340)
04-17 00:50:59.510: E/AndroidRuntime(13732):    ... 17 more
java android android-layout android-arrayadapter autocompletetextview
1个回答
1
投票

这条线造成的问题:

ArrayAdapter adapter = new ArrayAdapter(this,R.layout.activity_main,titles);

ArrayAdapter的构造函数的第二个参数是一个视图(默认为TextView),您可以使用该数据填充该视图。当你试图填充R.layout.activity_main本身就是RelativeLayout时,你会得到ClassCastException。如果您不打算使用比TextView更复杂的布局,请使用保留的Android布局。将提到的行更改为此行:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item,titles);
© www.soinside.com 2019 - 2024. All rights reserved.