我应该如何使用字符串过滤相应的复选框

时间:2012-03-01 16:49:32

标签: android listview filter android-arrayadapter

adapter = new ArrayAdapter<String(getApplicationContext(),android.R.layout.simple_list_item_multiple_choice,contactList);
    setListAdapter(adapter);

我的ListActivity顶部有一个EditText,用于过滤联系人列表。但是当我使用下面的代码进行过滤时。

search.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

                adapter.getFilter().filter(arg0);

            }
 }

只有与每个项目关联的字符串值被过滤掉,但与之关联的复选框保持不变。

实施例。假设我有3个联系人“A”,“B”和“C”。当我打开这个ListActivity并选择“A”时。现在,当我搜索联系人“C”时(通过在搜索框中输入“C”),联系人将过滤掉,我可以在顶部看到联系人“C”。但是,它表明它已被选中。实际上,它不是......因为与“C”相关联的复选框从未被缩短......并且当前复选框似乎与“C”相关联是“A”。

如何才能使过滤同步?

after A is selectedwhen filter in action。PNG

1 个答案:

答案 0 :(得分:0)

我也受到了这个问题的影响,通过使用我自己的自定义适配器扩展ArrayAdapter并覆盖getView来解决它,我根据未经过滤的列表将每个视图设置为选中/取消选中

这是我的getView代码:

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            CheckBox view = (CheckBox) super.getView(position, convertView, parent);

            MyObject object = getItem(position);

            view.setChecked(object.selected);
            view.setOnClickListener(MyClass.this);

            return view;
        }

我还有MyClass实现onClickListener,切换所点击的MyObject的选定状态并调用myAdapter.notifyDataSetChanged();