Как зафиксировать транзакции фрагмента в FragmentPagerAdapter в методе обратного вызова onLoadFinish? - PullRequest
5 голосов
/ 31 октября 2011

Я хотел бы уведомить ViewPagerAdapter, что набор данных изменился в Loader.onLoadFinish функции обратного вызова.

Это запрещено, поскольку состояние фрагментов может быть сохранено.

С LoaderManager.LoaderCallbacks.onLoadFinished (Загрузчик загрузчика, данные D) документация метода:

Обратите внимание, что обычно приложению не разрешено совершать фрагментированные транзакции во время этого вызова, поскольку это может произойти после сохранения состояния действия.

Как я могу преодолеть эту проблему? Как проверить, в каком состоянии находится Activity, и совершить Fragment транзакцию?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

Я пришел со следующим решением:

Метод changeCursorInOtherThread используется в onLoadFinished и onLoaderReset.

Handler создается в Activity:

private Handler mHandler = new Handler();

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mSaved = true;

}

private void changeCursorInOtherThread(final Cursor data) {
    if(!mSaved){
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                mViewPagerAdapter.changeCursor(data);
            }
        });
    }
}
1 голос
/ 21 марта 2012

У меня была похожая проблема.Хотел показать DialogFragment после onLoadFinished().Как вы сказали, невозможно зафиксировать транзакцию фрагмента внутри onLoadFinished().Но потом я понял, что могу просто реализовать LoaderCallbacks в DialogFragment.И это работает как шарм.Вместо того, чтобы слушать Loader, чтобы закончить свою работу в Activity, я делаю это внутри Fragment.

Вы можете сделать то же самое.Вместо реализации onLoadFinished() внутри вашей деятельности вы можете просто внедрить ее во фрагменты, которые помещены в вашу ViewPager.Конечно, в некоторых случаях это не имеет смысла в ViewPager, это зависит от вашей структуры данных.

Здесь обсуждается больше вопросов здесь .

...