我正在尝试实现在片段中运行的AsyncTaskLoader,但我不确切地知道onLoadFinished永远不会被调用的原因。我不确定我传递的背景是否合适。
这是基本和自定义的AsyncTaskLoader:
public static class CustomAsyncLoader extends AsyncTaskLoader<String>
{
public CustomAsyncLoader(Context context) {
super(context);
// do some initializations here
}
@Override
protected void onForceLoad() {
// TODO Auto-generated method stub
super.onForceLoad();
}
@Override
public void deliverResult(String apps) {
}
@Override
protected void onStopLoading() {
// Attempts to cancel the current load task if possible
cancelLoad();
}
@Override
public void onCanceled(String apps) {
super.onCanceled(apps);
}
@Override
public String loadInBackground() {
String result = "";
// ...
// do long running tasks here
// ...
return result;
}
}
在这里,我将向您展示被覆盖的3种方法:
@Override
public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
return new CustomAsyncLoader(root.getContext());
}
@Override
public void onLoadFinished(Loader<String> arg0, String arg1) {
// TODO Auto-generated method stub
Toast.makeText(mContext, "onLoadFinish", Toast.LENGTH_LONG).show();
}
@Override
public void onLoaderReset(Loader<String> arg0) {
// TODO Auto-generated method stub
}
在my片段的onResume方法中,我调用init来加载:
getLoaderManager().initLoader(0, null, this).forceLoad();
以及要评论的最后一个细节是片段如何实现加载器回调:
public class FragmentName extends CustomFragment implements LoaderManager.LoaderCallbacks<String>
让我们看看是否有人可以帮助我实现它。提前谢谢。
答案 0 :(得分:1)
您必须使用super.deliverResult(apps)
方法拨打deliverResult
。否则,您的CustomAsyncLoader的超类不会负责将结果传递给已注册的听众。