Я показываю данные, поступающие из 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.
Вы пытались использовать getListView().setSelection(int position)
в ListActivity? Аргумент position
начинается с 0 для списка, поэтому это не то же самое, что и ваша переменная id
, но в вашем цикле while вы можете рассчитывать с нуля при повторении курсора и использовать это как позицию.
Начальная позиция курсора не учитывается. Вы должны использовать listView.setSelection(int position) и получить позицию в соответствии с вашим id:
for (int position = 0; mDbCursor.moveToNext() && getId(mDbCursor) != id; position++) {}
setListAdapter(SimpleCursorAdapter);
getListView.setSelection(position);
getListView().setSelection(int position)
поставили меня на правильный путь. Я фактически закончил передачу текущей позиции из ListActivity в обновление Activity. Обновление Activity затем передает текущую позицию обратно в ListActivity. Это сохраняет циклы над курсором и будет работать, потому что в таблицу БД не добавляются и не удаляются.