как я должен фильтровать соответствующий флажок со строкой - PullRequest
2 голосов
/ 01 марта 2012
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 selected м when filter in action .png

1 Ответ

0 голосов
/ 24 сентября 2012

Я также столкнулся с этой проблемой, решил ее, расширив 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();

...