Android AsyncTaskLoader 不启动 loadInBackground?

2022-08-31 15:30:48

我正在尝试在Android上实现加载器示例,但无法让它启动加载程序。我正在使用以下代码。它将点击“创建加载程序”,但它永远不会到达“正在加载开始”日志消息。我是否错过了我需要的电话?

活动:

    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");
        }

    }

答案 1

我在使用兼容性库时遇到了同样的问题。我通过致电解决了它forceLoad

getLoaderManager().initLoader(0, null, this).forceLoad();

显然,AsyncLoader上的文档是缺乏的,HoneyComb上也存在这个问题。更多信息可以在这里找到

AsyncTaskLoader的官方示例也调用forceLoad(),所以它不是一个错误,但我仍然认为这种行为不是很直观。


答案 2

仅覆盖是不够的。loadInBackground()

看看上 http://developer.android.com/reference/android/content/AsyncTaskLoader.htmlAppListLoader

至少将这两种方法添加到加载程序中:

        @Override
        protected void onStartLoading() {
            if (takeContentChanged())
                forceLoad();
        }

        @Override
        protected void onStopLoading() {
            cancelLoad();
        }

并从其构造函数调用。onContentChanged()


推荐