Получение идентификатора элемента ListView из идентификатора строки его ListAdapter - PullRequest
1 голос
/ 11 июля 2011

Я пытаюсь создать список элементов с одним выбором (например, переключателя), которые запрашиваются из базы данных.Для работы с выбранной в данный момент строкой мне нужно использовать методы ListView getCheckedItemPosition() и setItemChecked().

У меня есть ListView, для которого установлено SimpleCursorAdapter.Когда я получаю текущий выбранный элемент, у меня есть идентификатор строки из базы данных, который мне нужно использовать, чтобы найти соответствующий элемент и вручную установить его для выбора с помощью вышеупомянутых методов.Другими словами, мне нужно отобразить состояние идентификатора строки на обязательно монотонный идентификатор строки (поскольку метод setItemChecked() принимает идентификатор позиции, а не идентификатор строки базы данных, и в моей базе данных я могу удалять элементы).*

Так есть ли способ получить идентификатор позиции из идентификатора строки таблицы?Я бы предпочел не прибегать к поиску, если это возможно.

Спасибо.

1 Ответ

4 голосов
/ 11 июля 2011

В итоге я просто создал простой метод, который просматривает все элементы (которые должны быть в порядке):

/**
 * Since Android apparently provides no way to do this, do a simple binary
 * search for the item position based on its row id.
 * @param adapter    The adapter to use
 * @param row    The rowId to search for
 * @param left
 * @param right
 * @return    Position, or -1 if not found
 */
public int getPositionFromRowId(ListAdapter adapter, long row, int left, int right) {
    if (left > right)
        return -1;
    int middle = (left + right) / 2;
    if (adapter.getItemId(middle) == row)
        return middle;
    if (adapter.getItemId(middle) > row)
        return getPositionFromRowId(adapter, row, left, middle - 1);
    else
        return getPositionFromRowId(adapter, row, middle + 1, right);
}

Редактировать: Используйте этот код, выполнив что-то вроде этого:

getPositionFromRowId(myListAdapter, row, 0, myListAdapter.getCount());
...