私はこのフラグメントを持っています:
public class ResultFragment extends Fragment implement LoaderCallbacks{
public static ResultFragment newInstance(Bundle args) {
ResultFragment fragment = new ResultFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<EstateSearch> onCreateLoader(int id, Bundle args) {
return new RESTLoader(getActivity(), "http://etc");
}
@Override
public void onLoadFinished(Loader<EstateSearch> loader, EstateSearch es) {
}
@Override
public void onLoaderReset(Loader<EstateSearch> loader) {
}
}
AsyncTaskLoader は次のようになります。
public class RESTLoader は AsyncTaskLoader を拡張します {
private String searchUrl;
public RESTLoader(Context context, String searchUrl) {
super(context);
this.searchUrl = searchUrl;
}
@Override
public EstateSearch loadInBackground() {
EstateSearch es = null;
try {
Network Stuff
} catch (Exception e) {
}
return es;
}
@Override
public void deliverResult(EstateSearch es) {
super.deliverResult(es);
}
@Override
protected void onStartLoading() {
forceLoad();
}
@Override
protected void onStopLoading() {
cancelLoad();
}
@Override
protected void onReset() {
super.onReset();
onStopLoading();
}
}
アプリが不可解な (少なくとも私にとっては) エラーでクラッシュします。
http://i46.tinypic.com/260fw43.png
いくつかの Log.ds を入れることで、AsyncTaskLoader のコンストラクターが呼び出されていないことがわかりました。ローダーの init() をフラグメント ライフサイクルの後半に移動しようとしました。それが重要な場合、フラグメントはViewPager内にあります。AsyncTaskLoader は、Activity から呼び出されたときに正常に動作します。
私が間違っていることについてのアイデアはありますか?