FragmentPagerAdapterを使用してタブ付きインターフェイスを実装しています。私の0番目のフラグメントは、作成時にローダーを作成し、onActivityCreated()でローダーに再接続しようとします。ここではクラスがあります:LoaderCallbacks.onLoadFinished()はFragmentPagerで呼び出されませんでしたか?
public class My0thFragment extends Fragment {
private boolean ranOnce = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onActivityCreated() {
if (!ranOnce) {
// if the first time we're being created, do an initial load of data.
getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
ranOnce = true;
} else {
// reconnect?
getLoaderManager().initLoader(500, null, mMyCallback);
// sanity check.
printAllLoaders(getLoaderManager());
}
}
private LoaderManager.LoaderCallbacks<Foo> mMyCallback = new LoaderManager.LoaderCallbacks<Foo>() {
@Override
public Loader<Foo> onCreateLoader(int arg0, Bundle arg1) {
return new FooLoader(getActivity(), arg1);
}
@Override
public void onLoadFinished(Loader<Foo> arg0, Foo arg1) {
Log.e(tag, "onLoadFinished()!");
}
@Override
public void onLoaderReset(Loader<Foo> arg0) {
Log.e(tag, "onLoaderReset()!");
}
};
}
そして、ここでのシナリオです:
- のAppは、0番目のフラグメントがFragmentPagerAdapterに作成され、開始します。
- onActivityCreated()メソッドが呼び出され、最初の実行時にローダーが作成されて開始されます。
- ローダーがまだ完了しないうちに、すぐに別のタブに切り替わります。
- ローダーが終了したことをログで確認できますが、コールバックではonLoadFinished()コールバックが返されません。これは、FragmentPagerAdapterがどのように動作するかに応じて、フラグメントが何らかの分離状態になっているためです。
- 0番目のタブに戻り、onActivityCreated()が呼び出され、initLoader()メソッドが再度呼び出されることがわかります。コールバックはまだ起動しません。
- この時点でローダーマネージャーにすべてのローダーを印刷して、ローダーがまだローダーマネージャーに座っていることを確認できます。
私はここで立ち往生しています。ローダーはフラグメントライフサイクルを考慮した開発者が使いやすいように設計されている必要があるため、何か間違っている必要があります。誰でも私がここで間違っていることを指摘できますか?
は