質問

I am trying to learn how to use AutoCompleteTextView in Android. I have written below code under guidance of some tutorial.

MainActivity.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>

While trying to add text it is not displaying while typing and cursor is moving. If I hold that TextView it is showing what I have typed.

enter image description here

Note:: If I type any string from predefined array, application is crashing with below exception.

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
役に立ちましたか?

解決

The problem caused by this line:

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

The second parameter of ArrayAdapter's constructor is a view (TextView by default) which you populate with your data. When you're trying to populate R.layout.activity_main that is a RelativeLayout per se, you get ClassCastException. If you're not going to use more complex layout than TextView, use a preserved Android layout. Change the mentioned line to this one:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item,titles);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top