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.
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);