Установка начальной позиции Android ListActivity

Я отображаю данные, поступающие из SQLite, в ListActivity. Пользователь может щелкнуть элемент списка, который отправляет его в действие, которое обновляет БД.

Как только активность обновления завершена, пользователь возвращается к исходной активности ListActivity.

Когда пользователь возвращается из ListActivity, я хотел бы, чтобы ListView располагался для отображения только что обновленных данных (например, в первой возможной позиции).

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

protected void onResume() {
    super.onResume();
    mDbCursor = mDbAdapter.getCursor();
    long id = getIntent().getLongExtra(FIRST_ID, -1); // Id of updated row.
    while (mDbCursor.moveToNext() && getId(mDbCursor) != id) {
    }
    .
    . calling setListAdapter(SimpleCursorAdapter);
    .
}

Я думаю, что курсор позиционируется в правильную строку после выхода из цикла while.


person Frank Harper    schedule 24.08.2011    source источник
comment
Оба ответа ниже, рекомендующие getListView().setSelection(int position), привели меня на правильный путь. На самом деле я передал текущую позицию из ListActivity в действие обновления. Затем активность обновления передает текущую позицию обратно в ListActivity. Это избавляет от зацикливания курсора и будет работать, потому что в таблицу БД не добавляются и не удаляются.   -  person Frank Harper    schedule 24.08.2011


Ответы (2)


Вы пытались использовать getListView().setSelection(int position) в своей ListActivity? Аргумент position начинается с 0 для списка, поэтому это не то же самое, что ваша переменная id, но в вашем цикле while вы можете считать с нуля при переборе курсора и использовать его в качестве позиции.

person Joel F    schedule 24.08.2011
comment
Спасибо @joel. Как-то я пропустил эту часть API! - person Frank Harper; 24.08.2011

Исходное положение курсора не учитывается. Вы должны использовать listView.setSelection(int position) и получить позицию в соответствии с вашим идентификатором:

for (int position = 0; mDbCursor.moveToNext() && getId(mDbCursor) != id; position++) {}
setListAdapter(SimpleCursorAdapter);
getListView.setSelection(position);
person njzk2    schedule 24.08.2011
comment
Спасибо @njzk2. Как-то я пропустил эту часть API! - person Frank Harper; 24.08.2011