我有列表片段和AsyncTaskLoader從Internet獲取數據。 列表分段由填充,BaseAdapter。LoaderManager開始加載時通知片段
當數據加載時,BaseAdapter用旋轉進度條填充第一行。當數據加載並且沒有錯誤發生時,數據被填入ListView。但是如果出現了一些錯誤(我在AsyncTaskLoader中有一個標誌表示錯誤),然後BaseAdapter用錯誤信息填充第一行。
問題:
當裝載有錯誤,LoaderManager自動嘗試重新加載數據(forceLoad()
稱爲),這是很好的。但我需要的是通知BaseAdapter數據正在加載,因此BaseAdapter可以將錯誤消息更改爲旋轉進度條。
有當LoaderManager呼籲forceLoad()
通知片段的任何簡單的好辦法?
我的建議:
ListFragment將實現以下接口,並通過該ListFragment在AsyncTaskLoader的構造。
public interface LoadingListener {
public void onLoadingStatusChanged(boolean isLoading);
}
然後,我可以在deliverResult(T data)
調用loadInBackground()
onLoadingStatusChanged(true)
和onLoadingStatusChanged(false)
。我擔心在AsyncTaskLoader中引用Fragment可能會泄漏該片段。
謝謝你的回覆。所以你建議像創建方法寄存器(Fragment f){mFragment = f; }並在Loader中取消註冊(){mFragment = null}並在onAttach()/ onDetach()中調用這些方法以避免泄漏? – traninho
是的,類似的東西,雖然我可能會使它更通用,並通過一個「片段」可以實現的接口。基本上與'Loader'已經有的'OnLoadCompleteListener'和'OnLoadCanceledListener'完全相同的API ... – Devunwired