Wie kann ich mein ListFragment aktualisieren, wenn es vom Backstack zum Layout zurückkehrt?

Zunächst sollte ich erwähnen, dass ich die ActionBarSherlock-Bibliothek aus Gründen der Abwärtskompatibilität verwende.

Ich habe eine Aktivität, die a hinzufügtListFragment wenn es zum ersten Mal gestartet wird. Ich habe eine SitteLoader das habe ich umgesetzt und befolge dieAsnycTaskLoader Beispiel sehr nah. MeineListFragment implementiert dieLoaderCallbacks<Cursor> Schnittstelle. Alle entsprechenden Callback-Methoden werden beim Hinzufügen des Fragments aufgerufen (onCreateLoader() , onLoaderFinished() ) und wenn es ersetzt wird (onLoaderReset() ).

MeineonActivityCreated(Bundle) Methode sieht so aus:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mAccountsDbAdapter = new AccountsDbAdapter(getActivity().getApplicationContext());

    setHasOptionsMenu(true);
    mCursorAdapter = new AccountsCursorAdapter(getActivity()
            .getApplicationContext(), R.layout.list_item_account, null,
            new String[] { DatabaseHelper.KEY_NAME },
            new int[] { R.id.account_name }, 0);

    setListAdapter(mCursorAdapter); 
    getLoaderManager().initLoader(0, null, this);
}

Später dieListFragment wird durch ein anderes Fragment B ersetzt. Wenn der Benutzer die Zurück-Taste drückt, wird Fragment B entfernt und das ListFragment wird erneut hinzugefügt. Die Liste ist jedoch leer und nur dieandroid:empty Elemente werden angezeigt und keine der LoaderCallback-Methoden aufgerufen. Ich kann den Debugger verwenden, um das festzustellengetLoaderManager().initLoader(0, null, this); heißt eigentlich aber sonst nix. Wenn ich es änderegetLoaderManager().restartLoader(0, null, this);werden die Rückrufe aufgerufen, aber meine Liste bleibt leer (obwohl Daten vorhanden sind, wird die Ansicht nicht aktualisiert).

Wie kann ich mein ListFragment dazu bringen, sich zu aktualisieren, wenn es wieder im Layout angezeigt wird? Hat jemand dies schon einmal erlebt, wie haben Sie es behoben?

Zu Ihrer Information, hier sind meine Rückrufmethoden

    @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    return new AccountsCursorLoader(this.getActivity()
            .getApplicationContext());
}

@Override
public void onLoadFinished(Loader<Cursor> loaderCursor, Cursor cursor) {
    mCursorAdapter.swapCursor(cursor);
    mCursorAdapter.notifyDataSetChanged();
}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    mCursorAdapter.swapCursor(null);
}

Einige Notizen:

Ich kann das nicht benutzensetListShown(true) Methoden im Beispiel, weil ich eineIllegalStateException dass es nicht mit einer benutzerdefinierten Inhaltsansicht verwendet werden kann.MeineAccountsCursorAdapter erweitert aSimpleCursorAdapter und modifiziert nur diebindView() Methode.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage