J'ai ListFragment et AsyncTaskLoader qui récupère des données à partir d'Internet. ListFragment est rempli par BaseAdapter.Notify Fragment lorsque LoaderManager démarre le chargement
Lors du chargement des données, BaseAdapter remplit la première ligne avec la barre de progression de rotation. Lorsque les données sont chargées et qu'aucune erreur ne s'est produite, les données sont renseignées dans ListView. Mais si une erreur s'est produite (j'ai un drapeau dans AsyncTaskLoader indiquant cette erreur), puis BaseAdapter remplir la première ligne avec un message d'erreur.
Problème:
Une fois le chargement contient des erreurs, LoaderManager tente automatiquement de charger les données à nouveau (forceLoad()
appelé), ce qui est bon. Mais ce dont j'ai besoin est de notifier BaseAdapter que les données sont en cours de chargement afin BaseAdapter peut changer le message d'erreur à la barre de progression tournante.
Existe-t-il un moyen facile de notifier un fragment lorsque LoaderManager appelle forceLoad()
?
Ma suggestion:
ListFragment mettra en œuvre l'interface ci-dessous et de transmettre cette ListFragment dans le constructeur de AsyncTaskLoader.
public interface LoadingListener {
public void onLoadingStatusChanged(boolean isLoading);
}
Ensuite, je peux appeler onLoadingStatusChanged(true)
dans loadInBackground()
et onLoadingStatusChanged(false)
dans deliverResult(T data)
. J'ai peur que la référence à Fragment dans AsyncTaskLoader puisse contenir ce fragment.
Merci de votre réponse. Donc vous suggérez quelque chose comme créer des méthodes register (Fragment f) {mFragment = f; } et unregister() {mFragment = null} dans Loader et appelez ces méthodes dans onAttach()/onDetach() pour éviter les fuites? – traninho
Oui, quelque chose comme ça, bien que je le rende probablement plus générique et transmette une interface que le 'Fragment' pourrait implémenter. Fondamentalement, la même API que 'OnLoadCompleteListener' et 'OnLoadCanceledListener' que' Loader' a déjà ... – Devunwired