Comment passer une grande collection entre les activités (flux de détail principal)

Contexte:

Je met en œuvre une application qui lit des informations sur les films à partir d'un service Web. Ce service Web renvoie plusieurs informations sur chaque film (titre, date, affiche url, réalisateur, acteurs, etc.).

  • Puis-je développer des applications Android sans IDE?
  • Espace flexible dans Android
  • Comment créer Progress Bar comme Image dans Android
  • Le problème de sélection de liste de choix unique Android?
  • Enregistrez et restaurez l'état effondré de ExpandableListActivity avec SimpleCursorTreeAdapter
  • Comment filtrer des activités spécifiques à tester par monkey en utilisant android.intent.category?
  • Ce service Web prend en charge la pagination, de sorte que les films sont chargés dans des packs de 100.

    La mise en oeuvre:

    L'idée est de montrer une grille avec toutes les affiches. Auto demandant plus d'éléments lorsque l'utilisateur se déplace vers le bas.

    Entrez la description de l'image ici

    Lorsqu'un élément est cliqué, l'utilisateur navigue vers une galerie avec la vue détaillée du film sélectionné, permettant de faire défiler les détails avec un ViewPager.

    Entrez la description de l'image ici

    Donc, l'idée est de transmettre la collection de films récupérés dans la grille à "DetailedGalleryActivity".

    MISE À JOUR: Il est également nécessaire de sauvegarder l'état lorsque l'utilisateur quitte le fragment afin de gérer le cycle de vie des fragments. Vous pouvez le tester en activant l'option développeur: ne pas garder les activités

    Le problème

    Ma première approche était de sérialiser la collection de films dans un json, et de le transmettre en tant que Chaîne supplémentaire à l'Activité.

    Mais puisque la liste des films est grande, si l'utilisateur défile beaucoup dans la grille, la taille du json est extrêmement grande pour un Bundle (voir la taille maximale des données de chaîne ), obtenant des exceptions d'exécution.

    J'ai vérifié certaines réponses qui parlent de la persistance des données dans SharedPreferences ou d'un autre stockage persistant avant de lancer l'activité de détail puis d'y accéder à partir du détail. Je trouve cette solution étrange car elle ignore les mécanismes permettant de transmettre les données entre les activités avec une solution personnalisée et artisanale.

    Quelle est la meilleure approche pour résoudre ce problème?

  • Erreur interne utilisant la découverte du service réseau dans Android
  • Notifications push sur les 3 plates-formes (Android, ios, Windows Phone)
  • Comment puis-je accéder à l'image en cache de Picasso pour faire une intention de partage?
  • Comment lancer une activité à partir d'un emplacement à l'écran, comme sur l'écran d'accueil ou dans les applications récentes?
  • Comment exécuter des applications externes, téléchargées mais pas installées sur Android?
  • Android + gradle: différentes méta-données de manifeste par saveur
  • One Solution collect form web for “Comment passer une grande collection entre les activités (flux de détail principal)”

    Je ne suis pas sûr de savoir si c'est une bonne suggestion.

    Créez une autre classe et ajoutez une méthode statique, nommez-la MovieUtil.

    //échantillon

    private class MovieUtil { private static List<Movies> movies; public static List<Movies> getMovies();//getter public static void setMovies(List<Movie> movies);//setter } 

    Avant de lancer la fonction DetailedGalleryActivity, définissez la liste des films sur MovieUtil.setMovies ()

    Puis on oncreate de DetailedGalleryActivity initialise la liste en utilisant MovieUtil.getMovies ()

    Remarque: vous pouvez effacer la liste des films sur movieutil lorsque vous fermez l'activité DetailedGalleryActivity.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.