我正在尝试在Android上实现一个加载器示例,但无法让它启动加载器。我正在使用下面的代码。它将命中"Create Loader“,但永远不会到达"Loading started”日志消息。我是不是错过了我需要的电话?
活动:
public class TestingZoneActivity extends ListActivity implements LoaderCallbacks<ArrayList<Content>>{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<ArrayList<Content>> onCreateLoader(int id, Bundle args) {
Log.e("TEST", "Create Loader");
return new ImageLoader(this);
}
@Override
public void onLoadFinished(Loader<ArrayList<Content>> loader, ArrayList<Content> data) {
setListAdapter(new ImageAdapter(this, data));
}
@Override
public void onLoaderReset(Loader<ArrayList<Content>> loader) {
setListAdapter(null);
}
}
加载器:
public class ImageLoader extends AsyncTaskLoader<ArrayList<Content>> {
public ImageLoader(Context context) {
super(context);
}
@Override
public ArrayList<Content> loadInBackground() {
Log.e("TEST", "Loading started");
}
}
发布于 2012-05-10 23:30:52
发布于 2013-05-18 01:41:10
仅覆盖loadInBackground()
是不够的。
看看http://developer.android.com/reference/android/content/AsyncTaskLoader.html上的AppListLoader
吧。
至少将这两个方法添加到您的加载器中:
@Override
protected void onStartLoading() {
if (takeContentChanged())
forceLoad();
}
@Override
protected void onStopLoading() {
cancelLoad();
}
并从其构造函数调用onContentChanged()
。
发布于 2013-10-21 02:36:27
rrayst的建议非常简洁。如果你这样写你的方法:
protected void onStartLoading() {
forceLoad();
}
你会注意到,当子活动出现,然后你返回父活动时,onStartLoading
(以及loadInBackground
)会再次被调用!
你能做什么?在构造函数中将内部变量(mContentChanged
)设置为true;然后在onStartLoading
中检查此变量。只有当它是真的时,才开始真正的加载:
package example.util;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
public abstract class ATLoader<D> extends AsyncTaskLoader<D> {
public ATLoader(Context context) {
super(context);
// run only once
onContentChanged();
}
@Override
protected void onStartLoading() {
// That's how we start every AsyncTaskLoader...
// - code snippet from android.content.CursorLoader (method onStartLoading)
if (takeContentChanged()) {
forceLoad();
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
}
https://stackoverflow.com/questions/10524667
复制相似问题