onLoadFinished() メソッドの Android ドキュメントに従って:
アクティビティの状態が保存された後に発生する可能性があるため、通常、この呼び出し中にアプリケーションがフラグメント トランザクションをコミットすることは許可されていないことに注意してください。詳細については FragmentManager.openTransaction() を参照してください。
https://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html#onLoadFinished(android.content.Loader, D)
(注:そのリンクをコピーしてブラウザに貼り付けてください... StackOverflowはそれをうまく処理していません..)
したがって、その状態でフラグメントをロードするべきではありません。ローダーをフラグメントに配置したくない場合は、アクティビティの onCreate() メソッドでフラグメントを初期化し、onLoadFinished が発生したときにフラグメントのメソッドを呼び出すだけです。
大まかな擬似コードは次のとおりです。
public class DummyFragment {
public void setData(Object someObject) {
//do stuff
}
public class DummyActivity extends LoaderCallbacks<Object> {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fragment newFragment = DummyFragment.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.simple_fragment, newFragment).commit();
getSupportLoaderManager.initLoader(0, null, this)
}
// put your other LoaderCallbacks here... onCreateLoader() and onLoaderReset()
public void onLoadFinished(Loader<Object> loader, Object result) {
Fragment f = getSupportLoaderManager.findFragmentById(R.id.simple_fragment);
f.setData(result);
}
明らかに、適切なオブジェクトと適切なローダーを使用し、おそらく便利な setData() メソッドを定義してフラグメントを更新したいと思うでしょう。しかし、うまくいけば、これはあなたを正しい方向に向けるでしょう.