Ten eerste kan ik een transactie (rij) die is opgehaald uit de database niet verwijderen
Regel 61 cast het resultaat van arg0.getItemAtPosition(arg2)
naar Cursor
, maar het retourtype is waarschijnlijk HashMap
(zoals het zegt in de Logcat-uitvoer). Normaal krijg je een Cursor
van een databasequery.
Als u de ID voor elke databaserij invoert in de HashMap
wanneer u het aan het bouwen bent, kunt u dat ID doorgeven aan uw deleteTransaction()
bel je onClick
evenement. Dus je moet
temp.put("Id", localCursor.getInt(localCursor.getColumnIndex("_id")));
in getAllTransaction()
, en wijzig vervolgens uw onClick()
methode om zoiets als dit te doen:
localDbCrud.open();
HashMap itemMap = (HashMap)localAdapter.getItem(arg2);
int item_id = Integer.parseInt((String)itemMap.get("Id"));
DbCrud.deleteTransaction(item_id);
localDbCrud.close();
Ik zou ook willen voorstellen om arg2
te hernoemen (en anderen) om duidelijkere namen te hebben zodat de code gemakkelijker te volgen is.
Ten tweede moet ik weten hoe ik de lijstweergave kan vernieuwen nadat ik het item heb verwijderd
U kunt notifyDataSetChanged()
. aanroepen op uw adapter om de ListView
. te vernieuwen nadat u een wijziging in de dataset heeft aangebracht.
EDIT:Houd er rekening mee dat SimpleAdapter
is bedoeld voor statische gegevens, dus uw kilometerstand kan variëren. De beste oplossing is waarschijnlijk om over te schakelen naar een ander type adapter, zoals ArrayAdapter
, of maak een nieuwe SimpleAdapter
elke keer dat u de dataset wijzigt.