Estoy tratando de administrar una lista simple en una aplicación de Android. El contenido de la lista se mantiene en una base de datos SQLite. Cuando el usuario selecciona y retiene una fila específica, aparece un menú contextual con la opción "Eliminar". Cuando seleccionan "Eliminar", la fila se elimina de la base de datos, pero la vista no se actualiza. Cuando salgo de la aplicación y regreso, la fila apropiada ha sido eliminada. Entonces, sé que la fila se borra, es solo el ListView que no se actualiza.¿Cómo actualizo mi ListView después de que la base de datos cambia?
Éstos son los bits correspondientes del código ...
En el método 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}
));
En el método 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);
¿Cuál falto ?
Gracias!
Gracias! Revisé el código del proyecto al que hizo referencia y descubrí que necesitaba almacenar el Cursor con la clase. Creo que estaba copiando y pasándolo, por lo tanto, el método requery() es ineficaz. Una vez que lo convertí en una variable de nivel de clase, funcionó. –