У меня есть ListView с SimpleCursorAdapter. Загружается из таблицы БД;400 строк.
Я хочу прокрутить строку в столбце "name = 'xxx'". Курсор отсортирован по имени.
Я знаю о методах ListView 'Scroll'. Но им требуется позиция.
Каков правильный эффективный способ прокрутки этой строки в поле зрения?
В любом случае я не знаю, чтобы найти эту строку в Курсоре без итерации по каждой строке. (да, я могу выполнить бинарный поиск), чтобы найти строку с соответствующим именем = xxx, чтобы получить позицию, требуемую методами ListView 'Scroll'.
Вот мой текущий код, который выполняет бинарный поискдля имени, чтобы перейти к. Это кажется неэффективным или как должен быть другой встроенный метод. Просто кажется, что должен быть метод 'cursor.find (colName, value)', который возвращает позицию.
public void scrollToName(String name) {
// Scroll to Name using Binary Search for name
int compareResult;
int startIndex = 0;
int lastIndex = checklistCursor.getCount() - 1;
int curIndex = ((lastIndex - startIndex) / 2) + startIndex;
// Position cursor
checklistCursor.moveToPosition(curIndex);
// Get name at cursor
String curName = checklistCursor.getString(checklistCursor.getColumnIndex(nameField));
// Find row that contains name
while ((compareResult = name.compareToIgnoreCase(curName)) != 0) {
if (compareResult > 0) {
startIndex = curIndex + 1;
} else {
lastIndex = curIndex - 1;
}
curIndex = ((lastIndex - startIndex) / 2) + startIndex;
checklistCursor.moveToPosition(curIndex);
curName = checklistCursor.getString(checklistCursor.getColumnIndex(nameField));
}
// Exit While Loop with position set to searched name
// Scroll to that position.
checklistView.smoothScrollToPositionFromTop(curIndex, (checklistView.getHeight() / 2),
200);
}