SQLite->ListView, Tabellenzeile ändern, neue einfügen

W

Wicki12

Ambitioniertes Mitglied
0
Hallo,

ich habe eine SQLite-Tabelle, die ich in einer ListView anzeige (mit SimpleCursorAdapter). Nun möchte ich Werte einer ListView-Zeile ändern oder eine neue ListView-Zeile (=neue Tabellenzeile) einfügen. Die ListView hat Elemente vom Typ EditText.
Frage 1: Wie kriege ich nun im Programm mit, wann der Nutzer die Änderungen in einer bestimmten Zeile abgeschlossen hat um sie nun in die Datenbank zu übertragen ?
Frage 2: Wie kann ich eine neue Zeile einfügen und wie kriege ich Kenntnis vom Ende des Einfügevorgangs ?
Frage 3: Muss ich um die Änderungen auch gleich sichtbar zu machen jedesmal mit requery() die gesamte Abfrage wiederholen obwohl sich ja immer nur 1 Zeile geändert hat ?

Dank im voraus für jeden Hinweis.

Gruß Wicki
 
1.) Auf dem EditText onFocusChangeListener und/oder onEditorActionListener nutzen.

2.) In die Datenbank fügt man mit dem SQL Befehl INSERT ein (bzw. man ändert mit UPDATE). Das ist völlig unabhängig von dem SELECT Statement, mit dem du den Cursor befüllst. (SELECT FOR UPDATE kennt SQLite nicht) Fertig ist der Befehl, wenn der AsyncTask fertig ist, in dem du den INSERT/UPDATE anstößt.

3.) Wegen 2.) leider ja.
 
Vielen Dank erstmal, werde das probieren. Frage 2 bezog sich darauf, wie ich in der ListView die neue Tabellenzeile einfügen kann, um sie dann in die Datenbank zu überführen.

Gruß Wicki
 
Fürs Danke gibts nen Button :D

Ich redete vom überführen der Daten in die Datenbank. Um der ListView eine weitere Zeile zu verpassen - das würde ich über einen eigenen Adapter machen, der an den Cursor delegiert und für die Extrazeile dann einen geeigneten View liefert. Aber da gibt es sicher bessere Ansätze.
 
Ich sage danke für die bisherigen Hinweise :D
Eine Lösung habe ich allerdings noch nicht gefunden. Hier nun ein Codeausschnitt, der das Problem veranschaulichen soll.
Code:
//Der mit der ListView verbundene Adapter ist ein 'SimpleCursorAdapter'.
//ListView ist für einen OnItemLongClickListener registriert und jede
//Zeile enthält 2 EditText-Elemente.
//Die ListView wird mit den Zeilen der Tabelle angezeigt, der Nutzer
//ändert bspw. die Werte der 2. Zeile. Danach macht er einen LongClick
//auf diese Zeile, der von der nachfolgenden Methode ausgewertet wird.
//[U][B]Frage:[/B][/U]
//Wie kriege ich die vom Nutzer geänderten Werte dieser ListView-Zeile 2 ?
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
  //Cursor auf die ursprünglichen Tabellenzeilen
  SQLiteCursor sc = (SQLiteCursor)arg0.getItemAtPosition(arg2);
  //Cursor positionieren auf Click-Zeile
  sc.moveToPosition(arg2);
  //[U][B]immer [/B][/U]aktuelle Werte der 1. Zeile der ListView
  EditText bn = (EditText) findViewById(R.id.textViewBook);
  EditText bw = (EditText) findViewById(R.id.textViewWriter);
  //ursprüngliche Werte des Datenbank-Cursors
  String z1=sc.getString(sc.getColumnIndex("bookname"));
  String z2=sc.getString(sc.getColumnIndex("writer"));
  //_id der Tabelle
  int i=sc.getInt(0);
}
Bitte um Hinweise.

Gruß Wicki
 
Du holst dir die EditTexte aus dem View, der zur Activity gehört. Der liefert immer den ersten, den er findet.
Was du willst, ist im aktuellen View der Zeile zu suchen, also arg1.findViewById(....).
 
  • Danke
Reaktionen: Wicki12
Danke, inzwischen habe ich das auch festgestellt und eine Lösung für das Persistieren der geänderten Werte einer ListView-row gefunden. Die Sache mit dem Einfügen einer neuen Zeile werde ich wahrscheinlich durch Anhängen einer Leerzeile an die Datenbanktabelle lösen.
Gruß Wicki
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.011
swa00
swa00
A
Antworten
10
Aufrufe
1.021
swa00
swa00
D
  • Data2006
Antworten
14
Aufrufe
486
jogimuc
J
Zurück
Oben Unten