Infini ViewPager
Cela semble possible, mais je vais avoir un peu de mal à trouver comment mettre en œuvre une ViewPager
qui peut page indéfiniment.
Mon cas d'utilisation est un calendrier qui montre un mois à un moment, mais serait en mesure de passer à un mois par la pagination assez de temps.
Actuellement, je suis juste extending PagerAdapter
, et 3 personnalisé MonthViews
sont ajoutés comme suit:
@Override
public Object instantiateItem(View collection, int position) {
final MonthView mv = new MonthView(HistoryMonthActivity.this);
mv.setLayoutParams(new ViewSwitcher.LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT));
mv.setSelectedTime(mTime);
((DirectionalViewPager) collection).addView(mv, 0);
return mv;
}
J'aimerais ne garder que 3 MonthView
s dans la mémoire à la fois, de sorte qu'il n'y a pas un énorme retard dans l'affichage des données de ma base de données sur chaque MonthView
lorsque l'utilisateur est la tabulation. Donc, à chaque fois qu'une nouvelle page est affichée, j'ai besoin de supprimer un MonthView
et ajouter un MonthView
. Si quelqu'un a une meilleure idée pour la même fonctionnalité , je serais ravi de l'entendre!
Je pense que je vais essayer d'utiliser un FragmentStatePagerAdapter
.
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de mettre en œuvre ce à l'aide d'un peu de magie dans mon
MonthView
s, monPagerAdapter
'sOnPageChangeListener
, ainsi qu'avec la modification du code source deViewPager
lui-même. Si quelqu'un est intéressé à la façon dont je l'ai réalisé, découvrez le code source ou un commentaire avec une question spécifique.PagerAdapter
méthodegetItemPosition()
mViewPager.setOffscreenPageLimit(3);
ViewPager
?En fait, j'ai été regarder les différentes façons de le faire "infini" de la pagination, et même si l'homme de la notion du temps, c'est qu'il est infini (même si nous avons une idée du début et de la fin des temps), les ordinateurs de traiter dans le discret. Il y a un temps minimum et maximum (qui peut être ajusté comme le temps passe, n'oubliez pas la base de la Y2K faire peur?).
De toute façon, le but de cette discussion est qu'il est/devrait être suffisante pour supporter relativement infinie plage de dates à travers une réalité finie la plage de date. Un grand exemple de ceci est le Android du cadre de
CalendarView
mise en œuvre, et laWeeksAdapter
en son sein. La date minimum par défaut est en 1900 et la date maximum par défaut est en 2100, ce qui devrait couvrir 99% de l'utilisation de calendrier de quelqu'un à l'intérieur d'un rayon de 10 ans autour d'aujourd'hui facilement.Ce qu'ils font dans leur mise en œuvre (en mettant l'accent sur les semaines) est de calculer le nombre de semaines entre la date minimale et maximale. Cela devient le nombre de pages du pager. Rappelez-vous que le pager n'a pas besoin de maintenir l'ensemble de ces pages simultanément (
setOffscreenPageLimit(int)
), il a juste besoin d'être en mesure de créer la page basée sur le numéro de page (ou de l'indice de position/). Dans ce cas, l'indice est le nombre de semaines que la semaine est à partir de la date minimale. Avec cette approche, vous avez juste à maintenir le minimum de la date et du nombre de pages (distance à la date maximale), puis pour chaque page, vous pouvez facilement calculer la semaine associé à cette page. Pas de danse autour du fait queViewPager
ne prend pas en charge en boucle (un.k.un infini de la pagination), et essayer de le forcer à se comporter comme il peut faire défiler à l'infini.Puis
WeekDaysFragment
pouvez facilement afficher la semaine à compter de la date passée en argument.