我正在我的MainActivity上实现LoaderManager.LoaderCallbacks,我正在重写onCreateLoader . 在onCreateLoader中,我只返回一个AsyncTaskLoader对象,我在其中覆盖onStartLoading方法,在该方法中我检查查询是否为null . 对于此代码有效,我需要调用forceLoad() . 以下是代码片段:
@Override
public Loader<String> onCreateLoader(int id, final Bundle args) {
return new AsyncTaskLoader<String>(this) {
@Override
protected void onStartLoading() {
// No need to peform a query if no arguments were passed
if (args == null) {
return;
}
// This needs to be called!!
forceLoad();
}
@Override
public String loadInBackground() {
/* some code */
}
};
}
问题是我不知道为什么我需要调用forceLoad(),因为它的实现是"empty"方法 . 在Loader Class的源代码中,forceLoad的实现是:
public void forceLoad() {
onForceLoad();
}
而onForceLoad()的实现是:
protected void onForceLoad() {
}
我试图在代码的其他部分找到一些覆盖forceLoad()或onForceLoad的方法(我使用(getSupportLoaderManager() . initLoader(arg1,arg2,arg3)),但直到这一刻还没有成功 . 为什么我有调用forceLoad(),为什么它工作?
2 回答
Loader类具有onForceLoad()的空实现的原因是Loader是一个基类 . 他们的子类应该是在实现onForceLoad() .
如果我们将看到你的代码,你正在使用AsyncTaskLoader,它基本上是Loader的子代,所以AsyncTaskLoader将具有onForceLoad()实现,实际上这是:
你的onCreateLoader()基本上应该是这样的:
我们还可以覆盖onStartLoading()方法来调用forceLoad(),这是实际触发loadInBackground()方法执行的必需步骤 .