- Forum-Beiträge: 14
07.01.2016, 13:23:02 via Website
07.01.2016 13:23:02 via Website
Hallo Leute,
ich bin neu in der Android-Programmierung und versuche seit Tagen vergeblich ein Problem zu lösen:
Meine MainActivity mit NavigationDrawer ruft nach Klick auf einen Drawer-Eintrag ein ListFragment auf, das eine ListView anzeigt.
Dazu werden Daten (MyData-Objekte) aus einer SQLite-DB gelesen. Damit das nicht im UI-Thread erfolgt, habe ich eine Handler-Klasse DbHandler, die Runnable implementiert und über die ich asynchron auf die DB zugreife (Übergabe ArrayList sqlInputData, Rückgabe ArrayList sqlOutputData):
public class MyDataFragment extends ListFragment …
// Objekt der Handlerklasse für Arbeitsthread initialisieren
private DbHandler mDbHandler = null;
private void updateListAdapterData() {
// alle DS aus DB lesen
// Eingabedaten für Arbeitsthread vorbereiten
// (hier keine notwendig, da alle DS gelesen werden)
ArrayList sqlInputData = new ArrayList();
// Methode aufrufen, die SQL-Aktion antriggert und Arbeitsthread erzeugt;
// setNewSqlAction liefert nur true, wenn kein Thread läuft
if (mDbHandler.setNewSqlAction(DbHandler.CMD_GET_ALL_MYDATA, sqlInputData)) {
new Thread(mDbHandler).start();
}
}
Das liefert mir die Daten für den ListAdapter, der ein Objekt meiner Klasse MyListDataArrayAdapter, abgeleitet von ArrayAdapter, ist:
public void handleSqlResponse(int sqlCommand, ArrayList sqlOutputData) {
// Switch Statement, um für jede Aktion eine geeignete Ergebnisbehandlung durchzuführen
switch (sqlCommand) {
case DbHandler.CMD_GET_ALL_MYDATA:
// Liste für Anzeige in der ListView
List<MyData> mMyDataList = (List<MyData> sqlOutputData.get(0);
MyListDataArrayAdapter myListDataArrayAdapter =
new MyListDataArrayAdapter(getActivity(),mMyDataList);
// Adapter setzen
setListAdapter(myListDataArrayAdapter);
// Mehrzeilige Auswahl für CAB erlauben
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
break;
…
Die Methode updateListAdapterData rufe ich in onResume() und in Alert-Dialogen nach dem Neuerstellen oder Löschen von MyData-Objekten auf. Hier funktioniert alles und meine ListView wird aktualisiert angezeigt.
Nach Klick auf einen Listeneintrag starte ich eine 2. Activity, in der die Details dargestellt und geändert werden. Dort wird bei onStop() eine Speicherung der geänderten Daten in der DB asynchron über die DbHandler-Klasse gestartet.
Meine ListView bringt diese Änderung nicht, obwohl die Speicherung erfolgt. Der Test zeigt, das onResume() des ListFragments aufgerufen wird, bevor der Speichern-Thread zu ende ist. Damit ist die Speicherung noch nicht abgeschlossen, wenn der Adapter aktualisiert wird.
Kann mir bitte jemand helfen?
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.