Code Bauer
- Forum-Beiträge: 16
28.05.2010, 17:42:34 via Website
28.05.2010 17:42:34 via Website
Hi Entwickler,
seit zwei Tagen bin ich am Probieren, Googeln und Doku wälzen, bisher ohne Erfolg. Dabei möchte ich eigentlich nur den Inhalt einer ListView im laufenden Betrieb ändern und Android (2.1) dazu bewegen die ListView in der GUI zu aktualisieren. Das Einzige was bisher funktioniert ist das Neusetzen des zugehörigen ArrayAdapters. Nach dem was ich bisher so gelesen hab ist das aus Ressourcen und Performance-Sicht nicht unbedingt die beste Lösung.
Folgende Ausgangssituation:
Ich habe eine TabActivity. In einem der Tabs erzeuge ich mittels Intent eine neue ListActivity. Diese wird über einen ArrayAdapter mit Werten befüllt. Hinzuzufügen wäre eventuell noch, dass die Liste nicht im StandardLayout läuft sondern von mir angepasst wurde (jeder Eintrag besitzt ein Icon und mehrere Textfelder).
Die Liste an sich ist relativ statisch, sie enthält immer die selben Einträge. Allerdings können Teile der Texte ersetzt werden (dies erfolgt in einem ClickHandler).
Probiert habe ich zwei Wege: Zum einen das direkte Anpassen der Eintragsobjekte (also ohne dabei auf den Adapter zuzugreifen) und das Entfernen und Neusetzen der jeweiligen Objekte über den Adapter (remove und insert, wobei ich vorher setNotifyChange(true) gesetzt habe).
Das Ende vom Lied: Die Liste wird optisch nicht aktualisiert. NotifyDataSetChanged() funktioniert ebenfalls nicht. Sowohl beim direkten Aufruf im ClickHandler noch bei Aufruf über eine Runnable-Klasse und runOnUiThread. Bisher hilft nur Neusetzen des ArrayAdapters.
Was mache ich falsch? Wie zwinge ich Android die Liste zu refreshen ohne den kompletten ArrayAdapter neu zuzuweisen??
seit zwei Tagen bin ich am Probieren, Googeln und Doku wälzen, bisher ohne Erfolg. Dabei möchte ich eigentlich nur den Inhalt einer ListView im laufenden Betrieb ändern und Android (2.1) dazu bewegen die ListView in der GUI zu aktualisieren. Das Einzige was bisher funktioniert ist das Neusetzen des zugehörigen ArrayAdapters. Nach dem was ich bisher so gelesen hab ist das aus Ressourcen und Performance-Sicht nicht unbedingt die beste Lösung.
Folgende Ausgangssituation:
Ich habe eine TabActivity. In einem der Tabs erzeuge ich mittels Intent eine neue ListActivity. Diese wird über einen ArrayAdapter mit Werten befüllt. Hinzuzufügen wäre eventuell noch, dass die Liste nicht im StandardLayout läuft sondern von mir angepasst wurde (jeder Eintrag besitzt ein Icon und mehrere Textfelder).
Die Liste an sich ist relativ statisch, sie enthält immer die selben Einträge. Allerdings können Teile der Texte ersetzt werden (dies erfolgt in einem ClickHandler).
Probiert habe ich zwei Wege: Zum einen das direkte Anpassen der Eintragsobjekte (also ohne dabei auf den Adapter zuzugreifen) und das Entfernen und Neusetzen der jeweiligen Objekte über den Adapter (remove und insert, wobei ich vorher setNotifyChange(true) gesetzt habe).
Das Ende vom Lied: Die Liste wird optisch nicht aktualisiert. NotifyDataSetChanged() funktioniert ebenfalls nicht. Sowohl beim direkten Aufruf im ClickHandler noch bei Aufruf über eine Runnable-Klasse und runOnUiThread. Bisher hilft nur Neusetzen des ArrayAdapters.
1public void issuesUpdated() {
2 runOnUiThread(new updateDoer(this));
3 }
4
5 class updateDoer implements Runnable {
6 SpeechListAdapter _adapter;
7 public updateDoer(SpeechListAdapter adapter){
8 _adapter = adapter;
9 }
10
11 public void run() {
12 _adapter.notifyDataSetChanged();
13 }
14 }
2 runOnUiThread(new updateDoer(this));
3 }
4
5 class updateDoer implements Runnable {
6 SpeechListAdapter _adapter;
7 public updateDoer(SpeechListAdapter adapter){
8 _adapter = adapter;
9 }
10
11 public void run() {
12 _adapter.notifyDataSetChanged();
13 }
14 }
Was mache ich falsch? Wie zwinge ich Android die Liste zu refreshen ohne den kompletten ArrayAdapter neu zuzuweisen??
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.