Der Inhalt des Adapters geändert hat, aber ListView nicht erhalten eine Benachrichtigung, nichts im hintergrund aktualisiert

Habe ich eine Menge zu Lesen über diese eine, auf SO aber ich havent in der Lage gewesen, eine Lösung zu finden, in meinem Fall. Hier ist das setup:

Aktivität Ein, die die Liste enthält, und die Daten werden angezeigt. Wenn meine Daten-manager die asynchrone Aufgabe abgeschlossen zu aktualisieren, geschieht Folgendes:

protected void onPostExecute(Void v) {
        super.onPostExecute(v);

        if (editedDataSectionRows == null)
            editedDataSectionRows = new int[] {0, 0, 0, 0, 0, 0, 0};

        mData= editedData;
        mSectionRows = editedDataSectionRows;

        if (mCallback != null) {
            mCallback.dataUpdated();
        }
    }

Wenn die Daten aktualisiert sind, wird die Aktivität a ruft Eine callback-und tut das folgende:

@Override
public void dataUpdated() {
    mData = mDataManagerInstance.getData();
    mDataSectionCount = mDataManagerInstance.getDataSectionRows();
    mListAdapter.notifyDataSetChanged();
}

mData ist eine ArrayList mit allen "Zeilen" und mDataSectionCount ist ein int[] mit Informationen darüber, wie mData sollte aufgeteilt werden in Abschnitte.

Nun, die Aktivität a hat Ein optionsmenu öffnen können, eine zweite Aktivität. Aktivität B.

Jedes jetzt und dann, wenn laufen Affe und Aktivität B beendet. Meine onResume für Eine Aktivität aufgerufen wird:

@Override
protected void onResume() {
    super.onResume();
    mDataManagerInstance = DataManager.getInstance();

    mDataManagerInstance.setDataUpdatedListener(this);
    mDataManagerInstance.updateData();

    this.invalidateOptionsMenu();
}

(updateData nur feuert sofort mein AsyncTask, wenn es nicht bereits ausgeführt wird) Und dann die Scheiße trifft den fan... :

FATAL EXCEPTION: main
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(-1, class com.applidium.headerlistview.HeaderListView$InternalListView) with Adapter(class se.*.android.activities.ListActivity$1)]
        at android.widget.ListView.layoutChildren(ListView.java:1582)
        at android.widget.ListView.commonKey(ListView.java:2104)
        at android.widget.ListView.onKeyDown(ListView.java:2085)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2620)
        at android.view.View.dispatchKeyEvent(View.java:7149)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1458)
        at android.widget.ListView.dispatchKeyEvent(ListView.java:2070)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1898)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1375)
        at android.app.Activity.dispatchKeyEvent(Activity.java:2356)
        at com.actionbarsherlock.app.SherlockFragmentActivity.dispatchKeyEvent(SherlockFragmentActivity.java:122)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1825)
        at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3585)
        at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3555)
        at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2805)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:213)
        at android.app.ActivityThread.main(ActivityThread.java:4787)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
        at dalvik.system.NativeStart.main(Native Method)

Irgendwelche Ideen?

Schreibe einen Kommentar