Records auf Datenbank eindeutig identifizieren

F

FireRider

Neues Mitglied
6
Moin Leute

Ich hab ein Problem und zwar hab ich eine ListView mit unbekannter Anzahl Einträge (Benutzer fügt sie selbst hinzu) und eine Datenbank (mit einer ID als Primary Key, autoincrement).
Die Einträge kann man auch löschen, allerdings weiss ich nicht wie genau.
Im moment mache ich es mit
Code:
myDB.execSQL("DELETE FROM " + TABLE_NAME + " WHERE titel = '" + titel + "';");
Aber das löscht eben alle mit dem gleichen Titel.
Ich habe es probiert mit der ID vom OnItemLongClickListener, aber die bringt nix, da die nachrückt wenn man in der ArrayList n Item löscht.

Bsp:
DB-ID's = 0, 1, 2, 3, 4
ListView-ID's = 0, 1, 2, 3, 4

Dann lösche ich Record Nummer 3 (ID 2)

DB-ID's = 0, 1, 3, 4
ListView-ID's = 0, 1, 2, 3, 4

Weiss jemand wie man das lösen kann?

Gruss, FireRider
 
Sind die Daten als Text im ListView oder machst du das mit einem SQLiteCursor? Wenn du es mit einem Cursor machst, kannst du dir über den Cursor die ID des Datenbankeintrags holen und diesen dann löschen.
 
Ich lese die Daten mit einem Cursor in eine ArrayList ein, die ich dann über einen ArrayAdapter an die ListView binde.
Ich verstehe jetzt nicht genau wie du das meinst, müsste ich dann beim OnItemSelectedListener die Tabelle noch mal durchlaufen oder wie?
 
Wenn mich nicht alles täuscht gibt es doch auch sowas wie einen Cursoradapter für die ListView?

Ja, gibt es. ^^
CursorAdapter | Android Developers

Wenn du den benutzen würdest, hättest du in jedem ListView Eintrag quasi einen Cursor drin, der auch die ID und alles enthält.
Eine andere Möglichkeit wäre es, in der ArrayList die ID mit zu übergeben und die dann irgendwo unsichtbar in einem View abzuspeichern (im Tag oder unsichtbares Textfeld), die Möglichkeit ist aber nicht besonders schön wie ich finde und der CursorAdapter ist ja extra dafür da. ;)

Beim Cursoradapter steht sogar bei "The Cursor must include a column named "_id" or this class will not work.", also wirst du da auch wohl problemlos auf die ID zugreifen können um den richtigen Eintrag zu löschen.
 
  • Danke
Reaktionen: FireRider
Lilithian schrieb:
Wenn mich nicht alles täuscht gibt es doch auch sowas wie einen Cursoradapter für die ListView?

Ja, gibt es. ^^
CursorAdapter | Android Developers

Wenn du den benutzen würdest, hättest du in jedem ListView Eintrag quasi einen Cursor drin, der auch die ID und alles enthält.
Eine andere Möglichkeit wäre es, in der ArrayList die ID mit zu übergeben und die dann irgendwo unsichtbar in einem View abzuspeichern (im Tag oder unsichtbares Textfeld), die Möglichkeit ist aber nicht besonders schön wie ich finde und der CursorAdapter ist ja extra dafür da. ;)

Beim Cursoradapter steht sogar bei "The Cursor must include a column named "_id" or this class will not work.", also wirst du da auch wohl problemlos auf die ID zugreifen können um den richtigen Eintrag zu löschen.

Danke :D
Werde ich heute mal probieren :)
 
Versuch es sonst mal nach dem löschen mit einem requery auf die Datenbank bzw. Cursor. Die ListView sollte danch ebenfalls benachrichtigt werden und sich aktualisieren.
 
Lilithian schrieb:
Wenn mich nicht alles täuscht gibt es doch auch sowas wie einen Cursoradapter für die ListView?

Ja, gibt es. ^^
CursorAdapter | Android Developers

Wenn du den benutzen würdest, hättest du in jedem ListView Eintrag quasi einen Cursor drin, der auch die ID und alles enthält.
Eine andere Möglichkeit wäre es, in der ArrayList die ID mit zu übergeben und die dann irgendwo unsichtbar in einem View abzuspeichern (im Tag oder unsichtbares Textfeld), die Möglichkeit ist aber nicht besonders schön wie ich finde und der CursorAdapter ist ja extra dafür da. ;)

Beim Cursoradapter steht sogar bei "The Cursor must include a column named "_id" or this class will not work.", also wirst du da auch wohl problemlos auf die ID zugreifen können um den richtigen Eintrag zu löschen.

Moin

Habe es mit einem SimpleCursorAdapter probiert (auch mit ein paar Tutorials aus dem Inet) aber irgendwie hänge ich da noch.
Mein jetziger Code sieht so aus (Noch ohne SimpleCursorAdapter):
Code:
ListView LV;
List<CharSequence> List = new ArrayList<CharSequence>();
ArrayAdapter<CharSequence> adapt = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_list_item_1,List);

....

List.clear();
    	
Cursor cur = myDB.rawQuery("SELECT _id,name FROM " + TABLE_NAME + ";",null);
int Column = cur.getColumnIndex("name");
    	
if (cur != null) {
    	if (cur.moveToFirst()) {
    		do {
    			String Name = cur.getString(Column);
        		List.add(Name);
    		} while (cur.moveToNext());
    			
    	}
        LV.setAdapter(adapt);
    }
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.676
Sempervivum
S
M
  • MikelKatzengreis
Antworten
5
Aufrufe
136
swa00
swa00
Zurück
Oben Unten