2011-07-06 4 views
4

複数選択の[OK、キャンセル]ダイアログボックスに連絡先を表示しています。私はダイアログに連絡先を表示するアダプタの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

を助けています

ごdialog.setOnCancleListenerに設定されたとonCancelにadapter.notifyDataSetChangedを(呼び出して試してみてくださいアダプター...私が見ることができない、理由かもしれない... –

答えて

0

「私は、元のリストを表示するには、バックスペースを押すと、選択した連絡先が確認されていません。」

は、多分それは私はあなたがあなたのチェックボックスのボタンの動作を制御するための方法を追加する必要があると思う

関連する問題