Я страдаю от той же проблемы, что и этот вопрос: Неправильный элемент проверен при фильтрации ListView в Android
Как предложено в предыдущем вопросе, у меня есть Hashset, содержащий все выбранные идентификаторы, но я не могу понять, как его использовать, когда курсор повторно заполняет отмеченные элементы.
Моя проблема носит исключительно косметический характер, например:
- "Facebook" находитсяна 5-й позиции в нефильтрованном списке.
- Пользователь выполнил поиск по запросу "face", в первой позиции в отфильтрованном списке появляется только "Facebook".
- Пользователь проверяет "Facebook" в качестве выбранного ивозвращается к нефильтрованному списку.
- Проверенный элемент - это 1-й элемент в списке, а не «Facebook» (5-й).
Примечание: За исключением этой проблемы, все остальное прекрасно работает.Например, «delete» удалит нужные элементы, потому что я использую selectedIds для этого (даже если отмеченные элементы неверны).
Один щелчок по элементу списка:
OnItemClickListener mOnItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//gets the Bookmark ID of selected position
Cursor cursor = (Cursor)parent.getItemAtPosition(position);
String bookmarkID = cursor.getString(0);
boolean currentlyChecked = checkedStates.get(position);
checkedStates.set(position, !currentlyChecked);
if (!selectedIds.contains(bookmarkID)) {
selectedIds.add(bookmarkID);
selectedLines.add(position);
} else {
selectedIds.remove(bookmarkID);
selectedLines.remove(position);
}
}
};
Внутри курсора: - в этом проблема.
Это заполняет проверенные элементы - проблема в том, что он делает это по позиции (pos) и чтобыла правильная позиция элемента в отфильтрованном списке, а не его позиция в нефильтрованном списке, что привело к неправильно помеченному элементу.
CheckedTextView markedItem = (CheckedTextView) row.findViewById(R.id.btitle);
markedItem.setChecked(checkedStates.get(pos));
Буду признателен за любую помощь!