0

我有从 Internet 获取数据的ListFragmentAsyncTaskLoader 。ListFragmentBaseAdapter填充。

加载数据时,BaseAdapter用旋转进度条填充第一行。当数据被加载并且没有发生错误时,数据被填充到ListView中。但是如果发生了一些错误(我在AsyncTaskLoader中有一个标志指示该错误),则BaseAdapter用错误消息填充第一行。

问题:

当加载出错时,LoaderManager会自动尝试再次加载数据(forceLoad()调用),这很好。但我需要通知BaseAdapter数据正在加载,以便BaseAdapter可以将错误消息更改为旋转进度条。

当LoaderManager调用时,是否有任何简单的好方法来通知片段forceLoad()

我的建议:

ListFragment 将实现下面的接口,并将这个 ListFragment 传递到 AsyncTaskLoader 的构造函数中。

public interface LoadingListener {
    public void onLoadingStatusChanged(boolean isLoading);
}

然后我可以打电话onLoadingStatusChanged(true)进来。我担心在 AsyncTaskLoader 中持有对 Fragment 的引用可能会泄漏该片段。loadInBackground()onLoadingStatusChanged(false)deliverResult(T data)

4

1 回答 1

0

您建议的实现是处理事情的好方法。虽然Loader已经为OnLoadCompleteand提供了回调OnLoadCanceled,所以一个开始的回调是你需要做的唯一补充。您还可以实现一个OnLoadStart随时触发onForceLoad()或被onStartLoad()调用的自定义回调,而不是loadInBackground它,它将更接近地反映现有的框架回调。

我建议,就像框架回调一样,您设置方法来注册和注销侦听器,而不是在构造函数中传递它,因此您的 Fragment 可以作为正常生命周期的一部分附加/删除自身,并且引用不会泄漏. 正如您所提到的,将它传递给构造函数而无法将其删除将被视为泄漏。

于 2012-12-01T04:10:44.523 回答