Android Honeycomb中的装载器

我试图找出如何在Android 3.0中使用Loaders ,但似乎无法得到它的工作。 文档只描述使用CursorLoader但我使用AsyncTaskLoader

从文档看来,你应该只需要实现AsyncTaskLoader.loadInBackground()但是它在getLoaderManager().initLoader()之后永远不会被调用,然后在callback中创build加载器。

我可以看到debugging消息说Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}所以它看起来像它被成功创build。

目前SDK中的加载器是否可能被破坏,或者在创build加载器后需要调用某些方法? (他们没有在CursorLoader例子中做到这一点)。

编辑:好像调用forceLoad()返回的加载程序上的initLoader()开始加载至less,但这意味着你不能正确处理旋转:(

Dianne Hackborn回答了bug跟踪器,并将我们介绍给静态库实现。 CursorLoader正在做forceLoad()这就是为什么它正在工作。

查看我附加的类,以便在错误跟踪器的大多数简单情况下为您处理此类: http : //code.google.com/p/android/issues/detail? id= 14944

您需要重写onStartLoading()方法。 看看开发者网站上的例子。

  /** * Handles a request to start the Loader. */ @Override protected void onStartLoading() { if (mApps != null) { // If we currently have a result available, deliver it // immediately. deliverResult(mApps); } // Start watching for changes in the app data. if (mPackageObserver == null) { mPackageObserver = new PackageIntentReceiver(this); } // Has something interesting in the configuration changed since we // last built the app list? boolean configChange = mLastConfig.applyNewConfig(getContext().getResources()); if (takeContentChanged() || mApps == null || configChange) { // If the data has changed since the last time it was loaded // or is not currently available, start a load. forceLoad(); } } 

亚历克斯; 你是否尝试validationonLoadInBackground()是否被调用?

onLoadInBackground():调用工作线程来执行实际的加载。 实现不应该直接提供结果,而应该从这个方法返回,最终最终会在UI线程上调用deliverResult(D)。 如果实现需要在UI线程上处理结果,则可以覆盖deliverResult(D)并在那里执行。