AutoCompleteTextView with custom list: how to set up OnItemClickListener

stfn picture stfn · Mar 17, 2010 · Viewed 7.1k times · Source

I am working on an app which uses tags. Accessing those should be as simple as possible. Working with an AutoCompleteTextView seems appropriate to me. What I want:

  • existing tags should be displayed in a selectable list with a CheckBox on each item's side
  • existing tags should be displayed UPON FOCUS of AutoCompleteTextView (i.e. not after typing a letter)

What I've done so far is storing tags in a dedicated sqlite3 table. Tags are queried resulting in a Cursor. The Cursor is passed to a SimpleCursorAdapter which looks like this:

Cursor cursor = dbHelper.getAllTags();
startManagingCursor(cursor);
String[] columns = new String[] { TagsDB._TAG};
int[] to = new int[] { R.id.tv_tags};
SimpleCursorAdapter cursAdapt = new SimpleCursorAdapter(this, R.layout.tags_row, cursor, columns, to);
actv.setAdapter(cursAdapt);

As you can see I created tags_row.xml which looks like this:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:paddingLeft="4dip" android:paddingRight="4dip"
    android:orientation="horizontal">
    <TextView android:id="@+id/tv_tags" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_weight="1"
        android:textColor="#000" android:onClick="actv_item_click" />
    <CheckBox android:id="@+id/cb_tags" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:onClick="actv_item_checked" />
</LinearLayout>

It looks like this:

image http://img708.imageshack.us/img708/5992/devicem.png

So the results are displayed just as I'd want them to. But the TextView's onClick listener does not respond. And I don't have a clue on how to access the data once an item is (de-)selected.

Behaviour of the list should be the following:

  • tapping a CheckBox item should insert/append the corresponding tag into the AutoCompleteTextView (tags will be semicolon-seperated)
  • tapping a TextView item should insert/apped the corresponding tag into the AutoCompleteTextView AND close the list.

Answer