Как я могу обновить свой ListFragment, когда он возвращается к макету из заднего стека?

Сначала я должен упомянуть, что я использую библиотеку ActionBarSherlock для обратной совместимости.

У меня есть активность, которая добавляетListFragment когда это впервые началось. У меня есть обычайLoader который я реализовал и следуетПример AsnycTaskLoader очень близко. мойListFragment реализуетLoaderCallbacks<Cursor> интерфейс. Все соответствующие методы обратного вызова вызываются при добавлении фрагмента (onCreateLoader() , onLoaderFinished() ) и когда он будет заменен (onLoaderReset() ).

мойonActivityCreated(Bundle) Метод выглядит так:

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

ПозжеListFragment заменяется другим фрагментом B. Когда пользователь нажимает кнопку «Назад», фрагмент B удаляется, а ListFragment добавляется снова. Тем не менее, список пуст и толькоandroid:empty элементы отображаются, и ни один из методов LoaderCallback не вызывается. Я могу использовать отладчик, чтобы определить, чтоgetLoaderManager().initLoader(0, null, this); на самом деле называется, но больше ничего. Когда я изменяю это наgetLoaderManager().restartLoader(0, null, this);обратные вызовы вызываются, но мой список остается пустым (хотя данные есть, представление не обновляется).

Как я могу заставить свой ListFragment обновлять себя, когда он возвращается в макет? Кто-нибудь сталкивался с этим раньше, как вы это исправили?

К вашему сведению, вот мои методы обратного вызова

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

Некоторые заметки:

I cannot use the setListShown(true) methods in the example because I get an IllegalStateException that it cannot be used with a custom content view. My AccountsCursorAdapter extends a SimpleCursorAdapter and modifies only the bindView() method.

Ответы на вопрос(7)

Ваш ответ на вопрос