android charger des données de manière asynchrone en vue de radiomessagerie
J'ai besoin d'une solution pour afficher le pager de mise en œuvre.
Tout d'abord je suis de chargement énorme de données à partir de la base de données dans une seule page,donc parfois au cours de la glisser ralentit balayage de fréquence(vous avez besoin de plusieurs temps de balayage sur la page) que dans le fond il est en train de faire de l'extraction de la tâche.
Je ne suis pas en utilisant async tâche pour le retour de vue.
Est-il possible de lazy load pages permettent à l'utilisateur d'aller sur l'autre page de balayage, mais les données n'est pas chargé.
Mon exemple de code est comme ci-dessous;
public Object instantiateItem(View container, int position) {
View v;
v = View.inflate(context,R.layout.swipearea, null);
listView = (ListView)v.findViewById(R.id.MyListView);
largeDataCall();
((ViewPager)container).addView(v);
return v;
}
Je suis à l'appel de cette dans sur la méthode de création.
pager=(ViewPager) findViewById(R.id.pagerAdapter);
pager.setAdapter(new SimplePager(MyPager.this));
pager.setCurrentItem(364);
Est-il une solution?
OriginalL'auteur Hanry | 2012-05-22
Vous devez vous connecter pour publier un commentaire.
Je suggère de travailler avec des Fragments (et pas directement avec les points de vue).
Vous avez besoin d'une Interface de fragments de leur dire lorsqu'ils sont indiqués:
De réaliser toutes vos fragments en œuvre de l'interface, et dans la méthode d'appel de votre chargeurs/asyncTasks/tâches en arrière-plan.
Puis mettre onPageChangeListener sur votre ViewPager, et lorsque vous détectez l'utilisateur a modifié la page, appelez la méthode d'interface sur votre fragment. Vous avez quelques choix avec cet écouteur, avec l'une des méthodes que vous pouvez attendre pour la viewPager arrêter à la diapositive pour déclencher votre interface d'appel.
Pour être en mesure d'obtenir le droit fragment de faire cet appel, prenez le fragment de yourFragmentApadter.instantiateItem(ViewGroup, int) qui sera de retour le fragment de cette position que si elle est déjà chargé.
Comme ça vous pourrez préparer vos fragments vides, points de vue et lorsque vous le faites glisser sur l'un, vous commencez à charger les données.
Fragments permettrait de rendre votre vie beaucoup plus facile. Si vous avez mis en œuvre dans un fragment, alors vous pouvez charger les données (de manière asynchrone) à chaque fois que vous voulez, puis de les afficher sur le Fragment de la createView(). developer.android.com/reference/android/support/v13/app/...
Ajouté un peu de mise en œuvre (ce qui n'est manquant est un fragment exemple, où onShowedFragment() serait mis en place et de charger vos données aynchronously).
Utilisation setMenuVisibility(boolean menuVisible), il est appelé lorsque vous basculez fragment, mis en œuvre dans l'adaptateur.
OriginalL'auteur galex
Je viens de terminer un très semblable tâche. Pour vous aider à démarrer sur de trouver la solution à votre problème en considération les points suivants dans l'ordre;
CursorLoader
s qui effectuent lourds de levage des tâches telles que l'extrait de la base de données de manière asynchrone. Ce tutoriel sur les interwebs introduit le ContentProvider Android approche. Le mieux pour vous familiariser avec le fonctionnaire Android URI et ContentProvider documentation si ces termes ne signifient pas grand-chose.FragmentStatePagerAdapter
au lieu de la traditionnelleFragmentPagerAdapter
. Je n'ai pas utilisé cette carte, mais j'ai lu qu'il ne instancie actuellement visible Fragment, c'est à dire pas ces Fragments à droite ou à gauche de l'onglet actuellement sélectionné.CursorLoader
s etc pour async db accès et sans heurt de l'INTERFACE utilisateur. C'est certainement possible, contrairement aux commentaires ci-dessus depuis beaucoup, beaucoup d'autres l'ont fait.OriginalL'auteur OceanLife
instantiateItem
est appelée lorsque l'ViewPager
est sur le point de swap et les besoins d'un point de vue. Il n'a pas ont pour créer réellement de tout. Je pense que finalement, lazy-loading. La façon dont je le vois, il y a deux choses que vous devez faire ici.1:
Mettre en Cache les données en arrière-plan lorsque l'utilisateur est sur le point d'accéder à votre page. Votre exemple valoir que 364 pages (bon dieu), donc je dirais que l'utilisation d'un écouteur pour gérer les changements de page. Lorsque vous êtes à la page 363, commencer à charger les données de 364. Lorsque vous êtes à 364, commencer à charger les données à 365 et conserver les données à 363 dans le cas où l'utilisateur souhaite revenir à l'écran initial. Si les chargements de données relativement rapidement ou l'utilisateur prend un certain temps pour échanger, il faut sans heurt en supposant que vous êtes en utilisant asyncTask ou le fil pour charger les données.
2: Avoir une sauvegarde de vue par défaut qui n'est pas rempli jusqu'à ce que les données sont récupérées. Vous aurez besoin de faire cela avec l'option 1 ainsi dans le cas où l'utilisateur charge la page avant de récupérer les données. Fondamentalement, il suffit d'avoir un point de vue qui dit "chargement..." ou quelque chose jusqu'à ce que vous avez données. Soit ça, ou de remplir les données en temps réel que vous obtenez. Dans ce cas, l'utilisateur verra la construction.
De toute façon, je pense que vous aurez besoin de cache quelque chose à faire de l'application de bonne apparence.
Cela signifie que vous êtes en train de charger les données synchrously pour trois pages différentes sur le thread de l'INTERFACE utilisateur, dont deux ne sont même pas visibles. Aussi, la moitié de votre travail est fait. L'utilisation d'un fil et il devrait accélérer les choses de manière significative.
Vous avez encore besoin d'un défaut de "pas fini" afficher dans le cas où vous n'avez pas récupéré toutes vos données lorsque l'utilisateur effectue.
Mais comment faire...C'est ma question, comme si ce point de vue est retourné, j'ai pour lier les données plus tard dans le thread de l'INTERFACE utilisateur et si j'utilise async task si une fois qu'il est ignoré il montre à l'écran est vide.
Utiliser le
publishProgress
méthode dansAsyncTask
que vous obtenez un nouveau record. Il est construit pour ce genre de chose. Les valeurs que vous transmettez sont les ensembles de données que vous collectez. Si vous ne pouvez pas obtenir des enregistrements séparés, puis de publier les résultats dansonPostExecute
qui est appelé immédiatement aprèsdoInBackground
. developer.android.com/reference/android/os/...OriginalL'auteur DeeV
J'ai eu un problème similaire. Un viewpager qui était chargement de données lourdes. Si vous n'allez pas changer le point de vue de l'individu pages souvent, alors je vous suggère de garder les pages en mémoire. Utilisez le code suivant pour effectuer cette
Si vous souhaitez actualiser les données sur la viewpager diapositives, utilisez
Et l'utilisation FragmentStatePagerAdapter.
OriginalL'auteur RaWa
Je ne pense pas qu'il y a moyen de paresseux charger les données dans le mode synchrone que vous décrivez. AsyncTask est le chemin à parcourir ou peut-être vous pourriez utiliser directement des threads. Je crois AsyncTask a été conçu spécifiquement pour ce type de fonctionnalité. Il est plus facile à utiliser que le fil directement. Si vous avez besoin d'idées sur la mise en œuvre, ont un oeil à:
http://geekjamboree.wordpress.com/2011/11/22/asynctask-call-web-services-in-android/
Pour afficher pager exemple, vous pouvez voir: developer.android.com/reference/android/support/v4/app/... et android-développeurs.blogspot.dans/2011/08/.... Vous devez connecter ce type de mise en œuvre avec AsyncTask pour obtenir une expérience utilisateur optimale.
OriginalL'auteur Code Poet
Avez-vous regardé dans android allumage de la bibliothèque? selon L'échantillon des applications il y a une composante "sans fin" et un http-cache composant.
Je n'ai pas essayé moi-même et je sais pas si c'est une solution pour vous-viens de voir les exemples.....
OriginalL'auteur k3b