2011-07-06 105 views
4

我在多选“Ok,Cancel”对话框中显示联系人。我已经为在对话框中显示联系人的适配器实现了Filterable。问题是,一旦我在使用类型前尝试选择(检查)联系人时,将检查该特定位置中的复选框,而不是联系人。带有警报对话框中复选框的列表视图

初始画面是这样

提前输入后,

当我打退格键,看到原来的列表中,选定的联系人未选中。

这是我的活动。

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

适配器是这样:

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; 

} 
+0

我认为你需要添加到控制复选框按钮行为的方法你适配器...我看不到,可能是原因... –

回答

0

“当我打退格键,看到原来的列表中,选定的联系人未选中。”

尝试为您的dialog.setOnCancleListener

和onCancel调用adapter.notifyDataSetChanged()

也许是帮助

相关问题