나는 입니다. ListFragment 및 AsyncTaskLoader은 인터넷에서 데이터를 가져옵니다. ListFragment은 BaseAdapter으로 채워집니다.LoaderManager가 로딩을 시작할 때 부분에 알립니다.
데이터가로드 될 때 BaseAdapter은 진행 진행 막대를 사용하여 첫 번째 행을 채 웁니다. 데이터가로드되고 오류가 발생하지 않으면 데이터는 ListView에 채워집니다. 그러나 어떤 오류가 발생하면 (AsyncTaskLoader에 오류가 있음을 나타내는이라는 플래그가 있음) BaseAdapter 오류 메시지와 함께 첫 번째 행을 채 웁니다.
는문제 :로드 오류가있는 경우
, LoaderManager 자동으로 선한 (forceLoad()
라는) 다시 데이터를로드하려고합니다. 하지만 내가 필요한 것은 BaseAdapter 데이터가로드 중임을 알려주는 것입니다. BaseAdapter 회전 진행률 표시 줄에 오류 메시지가 변경 될 수 있습니다.
LoaderManager이 (가) forceLoad()
이라면 쉽게 알릴 수 있습니까?
나의 제안 :
ListFragment 아래의 인터페이스를 구현하고 AsyncTaskLoader의 생성자에서이 ListFragment를 전달합니다.
public interface LoadingListener {
public void onLoadingStatusChanged(boolean isLoading);
}
그럼 난 deliverResult(T data)
에 loadInBackground()
에서 onLoadingStatusChanged(true)
및 onLoadingStatusChanged(false)
를 호출 할 수 있습니다. AsyncTaskLoader의 Fragment에 대한 참조를 보유하면 해당 부분이 누출 될 수 있습니다.
답장을 보내 주셔서 감사합니다. 그래서 메서드를 만드는 것과 같은 일을 제안하십시오 register (Fragment f) {mFragment = f; } 및 unregister() {mFragment = null}를 로더에서 호출하고 onAttach()/onDetach()에서 해당 메서드를 호출하여 누출을 방지 할 수 있습니까? – traninho
그래, 그걸 좀 더 일반적으로 만들 것이고, 'Fragment'가 구현할 수있는 인터페이스를 전달할 수도 있습니다. 기본적으로'OnLoadCompleteListener'와'Loader'가 이미 가지고있는'OnLoadCanceledListener'와 똑같은 API ... – Devunwired