2017-08-23 4 views
3

J'ai un chargeur qui télécharge des données pour mon RecyclerView. J'ai ajouté SwipeReftesh à cette liste et je n'arrive pas à comprendre ce que je ferai si je balaye, par exemple, quelques fois. Les Chargeurs précédents sont-ils morts ou seront-ils stockés en mémoire? Il ressemble à ceci:Est-ce que les chargeurs précédents sont morts ou seront-ils stockés en mémoire si j'en crée de nouveaux?

refreshLayout.setOnRefreshListener(new OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
     initializeDiscoverLoader(); 
     refreshLayout.setRefreshing(false); 
     } 
    }); 


    private void initializeDiscoverLoader() { 
    LoaderManager loaderManager = getLoaderManager(); 
    loaderManager.initLoader(R.integer.MOVIE_LOADER_DISCOVER_ID, null, MovieActivity.this); 
    } 

Répondre

1

RefreshLayout affiche simplement l'indicateur de progression et appelle la méthode de rappel de votre application. Ce que vous faites dans votre méthode de rappel n'a aucun lien avec RefreshLayout. Donc, si vous avez des chargeurs précédents en cours d'exécution, ils continueront à fonctionner jusqu'à la fin.

Il est toujours bon d'utiliser le même objet loader pour charger vos données. De cette façon, un seul objet loader s'exécutera à un moment donné. Vous n'aurez pas beaucoup d'objets loader en cours d'exécution simultanément.

En outre, vous avez utilisé refreshLayout.setRefreshing(false) à l'intérieur onRefresh() qui n'est pas nécessaire car Android l'appelle lui-même lorsque onRefresh() a été exécuté complètement.

Référence - De Documentation -

  1. Lorsque l'utilisateur fait un geste de balayage, le système affiche l'indicateur de progression et appelle la méthode de rappel de votre application. Votre méthode de rappel est responsable de la mise à jour des données de l'application.

  2. Lorsque l'utilisateur déclenche un rafraîchissement avec une action swipe comme décrit dans Respond au Gesture Refresh, vous n'avez pas besoin d'appeler setRefreshing()