Настройка Android ListActivity стартовой позиции

1

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

По завершении действия по обновлению пользователь будет отправлен обратно в исходную 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.

  • 0
    Оба ответа ниже, рекомендующие getListView().setSelection(int position) поставили меня на правильный путь. Я фактически закончил передачу текущей позиции из ListActivity в обновление Activity. Обновление Activity затем передает текущую позицию обратно в ListActivity. Это сохраняет циклы над курсором и будет работать, потому что в таблицу БД не добавляются и не удаляются.
Теги:
simplecursoradapter
android-listview

2 ответа

3
Лучший ответ

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

  • 0
    Спасибо @joel. Каким-то образом я пропустил эту часть API!
2

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню