5

Loader.onLoadFinishコールバック関数でデータセットが変更されたことをViewPagerAdapterに通知したいと思います。onLoadFinishコールバックメソッドでFragmentPagerAdapterでフラグメントトランザクションをコミットする方法?

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

LoaderManager.LoaderCallbacks.onLoadFinished(Loader loader, D data)メソッドのドキュメントから:通常、アプリケーションはこの呼び出しでは、アクティビティの状態の後に発生する可能性があるためsaved.`ありながらフラグメントトランザクションをコミットすることは許されない

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

答えて

4

私は解決策次のように来ている:onLoadFinishedonLoaderResetで使用されているchangeCursorInOtherThread

方法を。

HandlerActivityに作成されます。

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

私は同様の問題がありました。 onLoadFinished()の後にDialogFragmentを表示したいあなたが言ったように、onLoadFinished()の中でフラグメントトランザクションをコミットすることはできません。しかし、私はDialogFragmentLoaderCallbacksを実装することができたことに気づきました。そしてそれは魅力のように機能します。 Activityの中で仕事を終えるためにLoaderの話を聞くのではなく、私はFragmentの中でそれをします。

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

この問題の詳細については、hereをご覧ください。

関連する問題