sql >> Database >  >> RDS >> SQLite

Query verwijderen en vernieuwen in ListView in Android (sqlite)

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.




  1. Haal de laatste datum uit gegroepeerde MySQL-gegevens

  2. Hoe MariaDB Database in Debian 10 te installeren

  3. mySQL-fout 1040:te veel verbinding

  4. Groepsgewijs maximaal