I show the contacts in the Multi-select "Ok, Cancel" dialog box. I applied Filterable to an adapter that displays contacts in a dialog box. The problem is that as soon as I try to select (check) the contact while I use the type in front, the checkbox in this particular position is checked, not the contact.
The initial screen looks like
After entering the type
When I click backspace to see the original list, the selected contact is not marked.
This is my activity.
Cursor c = getContentResolver().query(People.CONTENT_URI, PROJECTION, null, null, Contacts.People.DEFAULT_SORT_ORDER ); startManagingCursor(c); ListAdapter adapter1 = new ContactListAdapter(this, c); LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = (View) inflater.inflate(R.layout.list_view, null); listView = (ListView) view.findViewById(R.id.contactlist); listView.setTextFilterEnabled(true); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setAdapter(adapter1); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setOnItemSelectedListener(this); alertDialog.setView(view);
The adapter is as follows:
public class ContactListAdapter extends CursorAdapter implements Filterable { public static final String[] PEOPLE_PROJECTION = new String[] { People._ID, People.NAME, People.NUMBER }; public ContactListAdapter(Context context, Cursor c) { super(context, c); mContent = context.getContentResolver(); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { final LayoutInflater inflater = LayoutInflater.from(context); final TextView view = (TextView) inflater.inflate( android.R.layout.simple_list_item_multiple_choice, parent, false ); view.setText(cursor.getString(1)); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { ((TextView) view).setTag(cursor.getLong(0)); ((TextView) view).setText(cursor.getString(1)); } @Override public String convertToString(Cursor cursor) { return cursor.getString(1); } @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { if (getFilterQueryProvider() != null) { return getFilterQueryProvider().runQuery(constraint); } StringBuilder buffer = null; String[] args = null; if (constraint != null) { buffer = new StringBuilder(); buffer.append("UPPER("); buffer.append(Contacts.ContactMethods.NAME); buffer.append(") GLOB ?"); args = new String[] { constraint.toString().toUpperCase() + "*" }; } return mContent.query(Contacts.People.CONTENT_URI, PEOPLE_PROJECTION, buffer == null ? null : buffer.toString(), args, Contacts.People.DEFAULT_SORT_ORDER ); } private ContentResolver mContent; }
source share