ListActivity Daten vor Anzeige bearbeiten

  • 4 Antworten
  • Letztes Antwortdatum
M

maniac205

Ambitioniertes Mitglied
10
Hallo,

habe folgendes Problem.

Vereinfacht möchte ich Daten aus einer Datenbank laden einen Wert z.B. durch einen String ersetzen und diese manipulierten Daten anschließend anzeigen.

Laden und Anzeigen der Daten aus der Datenbank funktioniert. Nur weiß ich nicht, wie ich die Daten vorher verändern kann.

Hier kurz der Code welcher zum Laden und Anzeigen der Daten verwendet wird.
Code:
Code:
private Cursor dataCursor;
dataCursor = isDatenbank.query(TABELLE_DATA, new String[] {
				SPALTE_DATA_ID, SPALTE_DATA_WERT}, 
				null, null, null, null, null);

startManagingCursor(dataCursor);
SimpleCursorAdapter dataCursorAdapter = new SimpleCursorAdapter(this,...);
setListAdapter(dataCursorAdapter);

An welcher Stelle kann ich die Daten ändern?
Hatte schon einmal überlegt ob ich die Daten aus dem Cursor auslesen kann und anschließend den neuen Wert an die Stelle schreiben kann. Leider scheitert dies daran, dass ich keine Funktion gefunden habe, die Daten in einen Cursor schreiben kann.
Auslesen würde z.B. ja über "Cursor.getInt("POSITION");" funktionieren. Leider fehlt mir die "set"-Funktion.

Alternativ kann ich die Daten im ListView ändern, wenn diese angezeigt werden?

Vielen Dank im voraus!

Grüße maniac
 
Hi,
am einfachsten ist es wenn du einen eigenen Adapter erstellst.
(Stichwort: Custom ArrayAdapter)

Gruß Maddi
 
  • Danke
Reaktionen: maniac205
Ok. Das schaue ich mir mal an.
Danke!
-----------------------------
Da die Variante mit dem ViewBinder einfacher ist, habe ich mich für diese entschieden.
Dein Weg hätte nach meinen Recherchen auch funktioniert. Nur wäre es schwieriger auf einen Klick zu reagieren und die weiteren Daten zu laden.
 
Zuletzt bearbeitet:
Ein ArrayAdapter ist an dieser Stelle aber furchtbar ineffizient. Ich würde eher empfehlen, einen CursorAdapter zu verwenden und dessen bindView-Methode zu überschreiben. Zusätzliches Stichwort: ViewHolder.

Gesendet von meinem MB525 mit Tapatalk 2
 
  • Danke
Reaktionen: maniac205
maniac103 schrieb:
Ich würde eher empfehlen, einen CursorAdapter zu verwenden und dessen bindView-Methode zu überschreiben. Zusätzliches Stichwort: ViewHolder.

Erst einmal Danke für deine Antwort!
Bin während meiner Recherche (zum Thema CursorAdapter und bindView-Methode überschreiben) auf einen die setViewBinder()-Methode des SimpleCursorAdapters gestoßen. Über diese ist es möglich, Daten vor der Ausgabe im ListView zu verändern, ohne das ich einen eigenen Adapter erstellen muss.

Was haltet ihr von dieser Vorgehensweise?

Der ursprüngliche Beitrag von 14:31 Uhr wurde um 15:15 Uhr ergänzt:

Das scheint zu funktionieren:
Code:
...
dataCursorAdapter.setViewBinder(VIEW_BINDER);
...

	static final ViewBinder VIEW_BINDER = new ViewBinder() {

		public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
			// Auswahl des richtigen Views.
			// Bei rückgabe false bearbeitet der Adapter die bindung
			if (view.getId() != android.R.id.text1)
			return false;
			
			String DatName = cursor.getString(columnIndex);
		
			//TextView wird gesetzt
			((TextView) view).setText("TestTexT");
			
			return true;
		}
	};

Natürlich soll an der Stelle "TestTexT" ein sinnvoller Wert eingesetzt werden
 
Zuletzt bearbeitet:
Zurück
Oben Unten