LoaderManager开始加载时通知片段

时间:2012-12-01 03:39:19

标签: android android-listview android-fragments android-loadermanager asynctaskloader

我有 ListFragment AsyncTaskLoader ,它从互联网上获取数据。 ListFragment BaseAdapter 填充。

加载数据时, BaseAdapter 会使用旋转进度条填充第一行。加载数据且未发生错误时,数据将填入 ListView 。但是如果发生了一些错误(我在 AsyncTaskLoader 中有一个标志指示该错误),那么 BaseAdapter 会在第一行填充错误消息。

问题:

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

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

我的建议:

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

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

然后我可以在onLoadingStatusChanged(true)loadInBackground() onLoadingStatusChanged(false)中拨打deliverResult(T data)。我很害怕在AsyncTaskLoader中保留对Fragment的引用可能会泄漏该片段。

1 个答案:

答案 0 :(得分:0)

您建议的实施是处理事情的好方法。虽然Loader已经为OnLoadCompleteOnLoadCanceled提供了回调,但启动回调是您需要进行的唯一补充。您还可以实现自定义OnLoadStart回调,该回调会随时调用onForceLoad()onStartLoad(),而不是loadInBackground,并且会更接近现有框架回调的镜像。

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