SQLite
 sql >> Database >  >> RDS >> SQLite

Elimina query e aggiorna in ListView in Android (sqlite)

In primo luogo, non sono in grado di eliminare una transazione (riga) recuperata dal database

La riga 61 trasmette il risultato di arg0.getItemAtPosition(arg2) su Cursor , ma il tipo restituito è probabilmente HashMap (come dice nell'output di Logcat). Normalmente ottieni un Cursor da una query del database.

Se inserisci l'ID per ogni riga del database nella HashMap quando lo stai costruendo, sarai in grado di passare quell'ID al tuo deleteTransaction() chiama il tuo onClick evento. Quindi, hai bisogno di

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

in getAllTransaction() , quindi rivedi il tuo onClick() metodo per fare qualcosa del genere:

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

Suggerirei anche di rinominare arg2 (e altri) per avere nomi più chiari in modo che il codice sia più facile da seguire.

In secondo luogo, ho bisogno di sapere come aggiornare la visualizzazione elenco dopo aver eliminato la voce

Puoi chiamare notifyDataSetChanged() sull'adattatore per aggiornare ListView dopo aver apportato una modifica al set di dati.

EDIT:Tieni presente che SimpleAdapter è pensato per dati statici, quindi il tuo chilometraggio può variare. La soluzione migliore è probabilmente passare a un diverso tipo di adattatore, come ArrayAdapter oppure crea un nuovo SimpleAdapter ogni volta che modifichi il set di dati.