Jak mogę odświeżyć mój ListFragment, gdy powróci do układu z tylnego stosu?

Najpierw powinienem wspomnieć, że używam biblioteki ActionBarSherlock dla wstecznej kompatybilności.

Mam działanie, które dodaje aListFragment kiedy się zaczyna. Mam zwyczajLoader które wdrożyłem i śledzęPrzykład AsnycTaskLoader bardzo blisko. MójListFragment implementujeLoaderCallbacks<Cursor> berło. Wszystkie odpowiednie metody wywołania zwrotnego są wywoływane po dodaniu fragmentu (onCreateLoader() , onLoaderFinished() ) i kiedy zostanie zastąpiony (onLoaderReset() ).

MójonActivityCreated(Bundle) metoda wygląda tak:

@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);
}

PóźniejListFragment jest zastępowany innym fragmentem B. Gdy użytkownik naciśnie przycisk Wstecz, fragment B jest usuwany i ponownie dodawany jest fragment listy. Lista jest jednak pusta i tylkoandroid:empty elementy są wyświetlane i nie są wywoływane żadne metody LoaderCallback. Mogę użyć debugera, aby to ustalićgetLoaderManager().initLoader(0, null, this); jest rzeczywiście nazywany, ale nic więcej. Kiedy go zmienięgetLoaderManager().restartLoader(0, null, this);, wywołania zwrotne są wywoływane, ale nadal moja lista pozostaje pusta (chociaż istnieją dane, widok nie jest odświeżany).

Jak uzyskać odświeżenie mojego ListFragmentu po powrocie do układu? Czy ktoś napotkał to wcześniej, jak to naprawiłeś?

FYI, oto moje metody oddzwaniania

    @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);
}

Niektóre notatki:

Nie mogę użyćsetListShown(true) metody w tym przykładzie, ponieważ otrzymujęIllegalStateException że nie można go używać z niestandardowym widokiem zawartości.MójAccountsCursorAdapter rozszerza aSimpleCursorAdapter i modyfikuje tylkobindView() metoda.

questionAnswers(7)

yourAnswerToTheQuestion