SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Abfrage löschen und in ListView in Android (sqlite) aktualisieren

Erstens kann ich eine aus der Datenbank abgerufene Transaktion (Zeile) nicht löschen

Zeile 61 wandelt das Ergebnis von arg0.getItemAtPosition(arg2) um zu Cursor , aber der Rückgabetyp ist wahrscheinlich HashMap (wie es in der Logcat-Ausgabe steht). Normalerweise erhalten Sie einen Cursor aus einer Datenbankabfrage.

Wenn Sie die ID für jede Datenbankzeile in die HashMap einfügen Wenn Sie es erstellen, können Sie diese ID an Ihre deleteTransaction() übergeben Rufen Sie Ihr onClick auf Veranstaltung. Sie brauchen also

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

in getAllTransaction() , und überarbeiten Sie dann Ihr onClick() Methode, um so etwas zu tun:

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

Ich würde auch vorschlagen, arg2 umzubenennen (und andere), klarere Namen zu haben, damit der Code leichter zu befolgen ist.

Zweitens muss ich wissen, wie ich die Listenansicht nach dem Löschen des Eintrags aktualisieren kann

Sie können notifyDataSetChanged() aufrufen auf Ihrem Adapter, um die ListView zu aktualisieren nachdem Sie eine Änderung am Datensatz vorgenommen haben.

BEARBEITEN:Bitte beachten Sie, dass SimpleAdapter ist für statische Daten gedacht, daher kann Ihr Kilometerstand variieren. Die beste Lösung besteht wahrscheinlich darin, zu einem anderen Adaptertyp zu wechseln, z. B. ArrayAdapter , oder erstellen Sie einen neuen SimpleAdapter jedes Mal, wenn Sie den Datensatz ändern.