web-dev-qa-db-fra.com

Comment obtenir la vue enfant d'un ViewPager pour un élément donné

Je vais garder la question aussi courte et simple que possible.

View activeView = mViewPager.getChildAt(mViewPager.getCurrentItem());

renvoie la vue enfant lorsque l'élément en cours est 0 et 1. Mais si l'élément en cours est 2, il retourne null. Pourquoi donc?

edit: Laissez-moi me reformuler. Comment obtenir la vue enfant d'un ViewPager à un emplacement donné?

19
CodePrimate

getChildAt(int) n'était pas la bonne approche. Ce que j'ai fait, c'est récupérer l'adaptateur utilisé dans ViewPager et y trouver mes vues:

adapter = mViewPager.getAdapter();
Fragment fragment = adapter.getItem(mViewPager.getCurrentItem());

View activeView = fragment.getView();

Comme déjà indiqué, le viewPager ne contiendra que l'enfant actuel et les enfants adjacents (currentItem () +/- 1), sauf indication contraire via setOffscreenPageLimit()

27
CodePrimate

Votre adaptateur de pageur de vues contient au maximum 2 pages, soit 2 vues/fragments, le reste est recyclé. Dans d'autres cas, ce que vous n'avez pas mentionné, c'est que vous pourriez avoir 2 pages/vues dans le ViewPager. 

Veuillez regarder à mViewPager.setOffscreenPageLimit()

5

Ajouter une balise à la vue de retour de Viewpager.

Le lien ci-dessous vous aidera: https://stackoverflow.com/a/20186828/1271891

3
Raj008

Au cours de mes efforts pour trouver un moyen de décorer les vues Android, je pense avoir défini une solution alternative au problème de l'OP que j'ai documentée dans mon blog . Je suis lié à cela car le code semble être un peu trop pour tout inclure ici.

La solution que je propose:

  • maintient l'adaptateur et la vue entièrement séparés
  • on peut facilement rechercher une vue avec n'importe quel index du pageur de vue et il sera retourné soit null si cette vue n'est pas chargée, ou la vue correspondante.

(Cette question est très simple pour celui-ci dans lequel j'ai posté la même réponse ).

0
Boris Strandjev