5

コールバック関数ViewPagerAdapterでデータセットが変更されたことをお知らせします。Loader.onLoadFinish

フラグメントの状態が保存される可能性があるため、これは防止されます。

LoaderManager.LoaderCallbacks.onLoadFinished (Loader loader、D data)メソッドのドキュメントから:

通常、アプリケーションは、アクティビティの状態が保存された後に発生する可能性があるため、この呼び出し中にフラグメントトランザクションをコミットすることは許可されないことに注意してください。

どうすればこの問題を克服できますか?どの状態にあるかを確認してトランザクションActivityをコミットするにはどうすればよいですか?Fragment

4

2 に答える 2

4

私は次の解決策を持っています:

メソッドはと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);
            }
        });
    }
}
于 2011-12-06T08:55:03.693 に答える
1

私も同様の問題を抱えていました。DialogFragmentアフターを見せたかったonLoadFinished()。あなたが言ったように、内部でフラグメントトランザクションをコミットすることはできませんonLoadFinished()。しかし、それから私は、で実装できることに気づきLoaderCallbacksましたDialogFragment。そしてそれは魅力のように機能します。Loader内でその仕事を終えるために聞く代わりにActivity、私は内でそれをしFragmentます。

あなたは同じことをすることができます。アクティビティ内に実装する代わりに、onLoadFinished()に配置されているフラグメント内に実装することもできますViewPager。もちろん、場合によっては意味がない場合もありViewPagerます。データ構造によって異なります。

この問題については、ここでさらに議論されています。

于 2012-03-20T21:53:56.223 に答える