Курсор Android находит строку с определенным значением - PullRequest
1 голос
/ 22 октября 2019

У меня есть 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);
}
...