sql >> Base de Datos >  >> RDS >> SQLite

Eliminar consulta y actualizar en ListView en Android (sqlite)

En primer lugar, no puedo eliminar una transacción (fila) recuperada de la base de datos

La línea 61 está emitiendo el resultado de arg0.getItemAtPosition(arg2) a Cursor , pero el tipo de retorno probablemente sea HashMap (como dice en la salida de Logcat). Normalmente obtienes un Cursor de una consulta de base de datos.

Si coloca la ID de cada fila de la base de datos en el HashMap cuando lo esté construyendo, podrá pasar esa ID a su deleteTransaction() llama a tu onClick evento. Entonces, necesitas

temp.put("Id", localCursor.getInt(localCursor.getColumnIndex("_id")));

en getAllTransaction() y luego revise su onClick() método para hacer algo como esto:

localDbCrud.open();
HashMap itemMap = (HashMap)localAdapter.getItem(arg2);
int item_id = Integer.parseInt((String)itemMap.get("Id"));
DbCrud.deleteTransaction(item_id);
localDbCrud.close();

También sugeriría cambiar el nombre de arg2 (y otros) para tener nombres más claros para que el código sea más fácil de seguir.

En segundo lugar, necesito saber cómo actualizar la vista de lista después de eliminar la entrada

Puede llamar a notifyDataSetChanged() en su adaptador para actualizar ListView después de haber realizado un cambio en el conjunto de datos.

EDITAR:tenga en cuenta que SimpleAdapter está diseñado para datos estáticos, por lo que su millaje puede variar. La mejor solución es probablemente cambiar a un tipo diferente de adaptador, como ArrayAdapter , o cree un nuevo SimpleAdapter cada vez que cambia el conjunto de datos.