CheckBox с SimpleCursorAdapter в ListActivity (ListView) - PullRequest
1 голос
/ 07 мая 2011

Привет всем, я знаю, что есть ряд руководств по реализации пользовательского адаптера, но я не уверен, что это правильно для меня.У меня есть представление списка пользовательского макета элемента, состоящего из двух TextViews и CheckBox.У меня есть следующий код:

list.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> adapter, View view, int position,
                long rowid) {

            CheckBox c = (CheckBox) view.findViewById(R.id.item_chkbox);
            c.setChecked(!c.isChecked());
            String n = ((TextView) view.findViewById(R.id.item_charName)).getText().toString();
            String p = ((TextView) view.findViewById(R.id.item_playerName)).getText().toString();
            ...

Когда я нажимаю на элемент в списке, флажок срабатывает и проверяется, но он не правильный.Это тоже не случайно.Сработавший CheckBox всегда находится на противоположной стороне, зеркально отображаясь в центре списка.Например, если бы у меня был список:

0 1 2 3 4

и нажав «0», проверка 4 сработала бы.Если бы я нажал 1, чек 3 сработал бы.Если я коснусь 2, 2 проверить чеки.Даже более странно, если я нажму 0 дважды, 3 проверки, затем 0 проверок.Нажмите в третий раз, 3 снимите флажки.Четвертый - 0 снимает галку.Это продолжается в соответствии со всеми случаями.Я не могу понять, что происходит.

Обратите внимание, что строки n и p обе отображаются правильно.Другими словами, нажатие 0 приведет к извлечению строки для «имени» в соответствующем элементе списка.Это только CheckBoxes, которые не в порядке.Есть идеи?

Ответы [ 3 ]

1 голос
/ 29 августа 2011

Я столкнулся с вашей проблемой, и мое решение заключается в удалении всего, что связано с множественным выбором представления списка, например android: CHOICE_MODE_MULTIPLE, android: choiceMode, .... Просто попробуйте!

1 голос
/ 08 апреля 2012

Вина должна перейти на ListView, потому что при прокрутке пользовательского ListView вы должны переопределить getView(...) адаптера .Документы API говорят, что представление переработано.В результате состояние предыдущего представления должно быть сохранено.Например, проверяется ли CheckBox.Если вы восстановите состояние, ListView будет отображаться как ожидалось.

0 голосов
/ 07 мая 2011

Я не пробовал, но думаю, что это должно работать: в методе onItemClick вместо использования view объекта для поиска CheckBox попробуйте использовать ListView.getChildAt(position).

...