Как обновить ListView после изменения базы данных? - PullRequest
7 голосов
/ 21 февраля 2011

Я пытаюсь управлять простым списком в приложении для Android.Содержимое списка хранится в базе данных SQLite.Когда пользователь выбирает и удерживает определенную строку, появляется контекстное меню с опцией «Удалить».Когда они выбирают «Удалить», строка удаляется из базы данных, но представление не обновляется.Когда я возвращаюсь из приложения и возвращаюсь, соответствующая строка была удалена.Итак, я знаю, что строка удалена, просто ListView не обновляется.

Вот соответствующие биты кода ...

В методе onCreate ...

SQLiteDatabase db = tasks.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, 
    new String[] { _ID, TITLE, DETAILS, }, 
    null, null, null, null, TITLE + " DESC");
startManagingCursor(cursor);

ListView lv = (ListView) findViewById(R.id.list);
lv.setAdapter(new SimpleCursorAdapter(this, 
    android.R.layout.simple_list_item_1,
    cursor,
    new String[] {TITLE},
    new int[] { android.R.id.text1}
));

В методе onContextItemSelected ...

switch(item.getItemId()) {
case 0:
    SQLiteDatabase db = tasks.getWritableDatabase();
    ListView lv = (ListView) findViewById(R.id.list);
    SimpleCursorAdapter adapter = (SimpleCursorAdapter) lv.getAdapter();
    db.delete(TABLE_NAME, "_ID=?", new String[] {adapter.getCursor().getString(0)});
    adapter.notifyDataSetChanged(); // Not working, clears screen and doesn't reload
    return true;
}
return super.onContextItemSelected(item);

Чего мне не хватает?

Спасибо!

1 Ответ

5 голосов
/ 21 февраля 2011

Избавьтесь от notifyDataSetChanged() и позвоните requery() на свой Cursor. Вот пример проекта , демонстрирующий это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...