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)并在那里执行。