Android ViewPager obtenir le point de Vue actuel
J'ai un ViewPager, et je voudrais obtenir le courant sélectionné et visible de vue, pas une position.
getChildAt(getCurrentItem)
renvoie mauvaiseView
-
Cela fonctionne pas tout le temps. Parfois renvoie la valeur null, parfois renvoie simplement faux.
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser == true) { mFocusedListView = ListView; } }
-
PageListener sur
ViewPager
avecgetChildAt()
aussi ne travaillent pas, ne me donne pas la Vue correcte à chaque fois.
Comment puis-je obtenir en cours d'Affichage visible?
View view = MyActivity.mViewPager.getChildAt(MyActivity.mViewPager.getCurrentItem()).getRootView();
ListView listview = (ListView) view.findViewById(R.id.ListViewItems);
Vous devez vous connecter pour publier un commentaire.
J'ai pensé à elle. Ce que j'ai fait a été d'appeler
setTag()
avec un nom à tous lesView
s/ListView
s, et il suffit d'appelerfindViewWithTag(mytag)
,mytag
en cours de la balise.Malheureusement, il n'y a pas d'autre moyen de résoudre ce problème.
onCreateView
d'un fragment si vous utilisez fragment pager adaptateurJe viens de tomber sur le même problème et l'a résolu en utilisant:
mViewPager.getChildAt(i).isFocused()
pour tous les enfants, elle les rapportsfalse
pour tous les enfants. Ce qui est probablement parce que je suis en train de mettre ce code dans le menu d'options, qui est une partie de la MainActivity, donc le déplacement de l'accent de la ViewPager. Donc, de cette façon l'habitude de travailler dans certaines situations.Vous pouvez obtenir de l'élément courant en accédant à votre liste de itens à partir de votre carte d'appel
myAdapter.yourListItens.get(myViewPager.getCurrentItem());
Comme vous pouvez le voir, ViewPager pouvez récupérer l'index de l'élément de vous carte (page actuelle).
Si vous avez utilise FragmentPagerAdapter vous pouvez le faire en fonte:
et appel
Cela fonctionne très bien pour moi 😉
getItem()
est censé toujours renvoyer une nouvelle instance d'un Fragment lorsque le sous-classementFragment(State)PagerAdapter
. Donc, ce n'est pas juste dans la mesure où il crée une nouvelle instance au lieu de retourner le "vieux" un.Utiliser un Adaptateur extension PagerAdapter, et remplacer setPrimaryItem méthode à l'intérieur de votre PagerAdapter.
https://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
Lors de mes tentatives de trouver un moyen de décorer android points de vue, je pense que j'ai défini solution de rechange pour les th des OP problème que j'ai documenté dans mon blog. Je suis une liaison à ce que le code semble être un peu trop pour tout compris, ici.
La solution que je propose:
null
si ce point de vue est actuellement pas chargé ou la vue correspondante.est que votre première activité sur l'écran ou avez-vous certaines couches au-dessus de chaque autre déjà?
essayez ceci:
ou tout simplement:
aussi en fonction de ce que vous voulez essayer:
comment fait ce jeu pour tous y ' all?
alors voici le code pour accéder à votre page
Si vous le souhaitez, vous pouvez configurer un peu meathod
getChildAt(pager.getCurrentItem())
ne pas faire ce que vous voulez. Par exemple ViewPager pouvez avoir 1000 pages, mais seulement de 5 enfants, donc vous allez en dehors des limites si l'élément en cours est la dernière page.Essayer cette
J'ai dû le faire plus générale, j'ai donc décidé d'utiliser la "position" de ViewPager.LayoutParams
J'utilise cette méthode avec
android.support.v4.view.ViewPager
Vous pouvez trouver fragment par le système de tag. C'est un travail pour moi. Je l'ai utilisé en
OnMeasure
fonction.id
- viewPager IDposition
- fragment lequel vous souhaitez obtenirImportant! Vous obtenez ce fragment si votre fragment a été créé à l'adaptateur. Donc, vous devez vérifier
supportedFragmentManager.findFragmentByTag("android:switcher:" + id + ":" + position)
annulerVous pouvez obtenir de l'afficher comme ceci:
Vous ne devriez pas donner de balises personnalisées dans l'adaptateur
Je suis en utilisant ViewPagerUtils de FabulousFilter:
Si vous examinez attentivement, il y a au plus 3 vues enregistrées par ViewPager.
Vous pouvez facilement obtenir le point de vue actuel par
setOffscreenPageLimit(int)
Veuillez cocher cette
d'autre de vérifier ce lien.
getChildAt()
est différente de la gamme degetCurrentItem()
. Par exemple, si votre ViewPager montre de 20 articles 1 à l'écran de la page, puisgetChildAt()
'de la gamme s est 0-2 toutgetCurrentItem()
'de la gamme s est 0-19. Vous auriez principalement les valeurs de retour null.