2017-10-10 12 views
2

Dans mon projet, j'ai une activité qui charge une liste de nouvelles. Lorsque la liste est chargée, cette activité est rempli avec les informations du premier élément de la liste:Comment faire une activité "glisser l'information"?

enter image description here

Mais puisque cette charge toutes les nouvelles du serveur, je veux que l'utilisateur de pouvoir échanger les nouvelles avec son doigt. Par exemple: nous commençons par les nouvelles [0] et l'utilisateur balaye vers la gauche, le contenu change en nouvelles [1]. L'utilisateur balaye de nouveau et le contenu change en news [2] et ainsi de suite ... si l'utilisateur balaye bien, alors il revient aux informations précédentes (news [1]). L'en-tête ne doit pas avoir un mouvement de balayage, seul le cadre principal (l'image et le corps devrait changer):

enter image description here

Quelle serait la meilleure aproche de ce comportement? Je pensais à utiliser un TabLayout avec ViewPager mais je ne suis pas sûr que ce soit la bonne façon de le faire. Si j'ai quelque chose comme 100 nouvelles cela pourrait être une surcharge pour charger 100 fragments dans le droit ViewPager?

Est-ce que android a une meilleure façon de le faire? Comment dois-je faire cela?

+3

Non, 100 fragments sont totalement fins. 'ViewPager' conservera toujours au moins 3 pages chargées à la fois, vous pouvez le configurer pour plus de détails. Vous pouvez également implémenter la pagination pour charger un nombre spécifique de nouvelles, comme 20, puis 20 autres, etc. –

+0

Une autre option pourrait être un RecyclerView avec un HorizontalLayoutManager comme dans cette réponse: https://stackoverflow.com/a/28460399/4232337 Ceci, bien sûr, serait moins intéressant si vous cherchez à avoir le comportement "instantané" que fournit ViewPager – NSimon

Répondre

3

Vous pouvez utiliser ViewPager pour cela. Avoir 100 fragments à l'intérieur est tout à fait correct car ViewPager chargera seulement autant que vous définissez en utilisant setOffscreenPageLimit(pageLimit). Par exemple, si vous définissez pageLimit = 3, ViewPager initialisera uniquement 3 (jusqu'à 6) fragments voisins situés sur le côté droit/gauche de votre fragment visible. Et pendant que vous balayez des fragments, il va tuer les fragments qui sont hors de cette limite et en charger de nouveaux. Donc, il n'y aura pas d'overkill.