Неправильный элемент проверен при фильтрации ListView в Android - PullRequest
6 голосов
/ 21 марта 2010

У меня есть ListView с несколькими вариантами записи, где некоторые проверяются с самого начала, используя

setItemChecked(position, true);

. Я комбинирую это с опцией фильтрации

setTextFilterEnabled(true)

, поэтому легко найтиконкретная запись в списке.

Проблема заключается в том, что при фильтрации списка записи меняются местами в представлении списка.Возьмем, к примеру, три записи: «A», «B» и «C», где «C» проверяется заранее (т.е. запись в позиции 3 в списке).Когда я набираю «C» на клавиатуре, отображается только запись «C» (как и предполагалось).Теперь «C» больше не проверяется, поскольку запись переместилась из отмеченной позиции 3 в незарегистрированную позицию 1 в списке.

Такое поведение приводит к некоторым нежелательным эффектам в приложении.Есть ли способ «переместить выделение с помощью фильтрации», то есть привязать проверенное состояние к записи, а не к ее начальной позиции в списке?Или мне нужно найти новый подход?

Спасибо,

Линус

Ответы [ 2 ]

3 голосов
/ 21 марта 2010

Ведение списка выбранных элементов, и всякий раз, когда список заполняется, проверяется, существует ли в списке id (не позиция), и устанавливается в качестве выбранного.

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

Да, это связано с тем, что ListView хранит позицию как ссылку на выбранные элементы.Это означает, что даже для адаптеров со стабильными идентификаторами выбор привязан к позиции (которая была отфильтрована в вашем случае).Как было предложено, реализовать некоторую пользовательскую карту / набор для хранения идентификаторов, которые проверены, и передать их в адаптер.

...