我有一个SherlockListFragment
来实现自定义AsyncTaskLoader
。
在被覆盖的onStartLoading()
中,我有:
@Override
protected void onStartLoading() {
if (mData != null) {
deliverResult(mData);
}
else{
forceLoad();
}
}
包含SherlockListFragment
在onActivityCreated
中启动加载程序:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new MyListAdapter(getActivity());
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
和:
@Override
public Loader<List<MyData>> onCreateLoader(int id, Bundle args) {
return new MyListLoader(getActivity());
}
问题是,在对FragmentActivity进行5次激活/导航后,不会调用loadinBackground()
。调用onStartLoding
以及forceLoad
,但就是这样。
没有异常,LogCat中没有任何内容。
有什么想法吗?
答案 0 :(得分:0)
可以调用 forceLoad()。
查看文档says:
通常只应在加载程序启动时调用它 - 也就是说,isStarted()返回true。
完整代码:
@Override
protected void onStartLoading() {
try {
if (data != null) {
deliverResult(data);
}
if (takeContentChanged() || data == null) {
forceLoad();
}
Log.d(TAG, "onStartLoading() ");
} catch (Exception e) {
Log.d(TAG, e.getMessage());
}
}
documentation says: Loader<D>
的子类通常必须至少实现 onStartLoading(),onStopLoading(),onForceLoad()和onReset()。
AsyncTaskLoader扩展Loader但不实现 onStartLoading(),onStopLoading(),onReset()。你必须自己实现它!
P.S。在使用简单的CursorLoader之后,我对它感到困惑,我也认为使用forceLoad()是不好的做法。但事实并非如此。