Obtenez de voir de ViewPager
- je utiliser le ViewPager pour basculer entre les vues gauche/droite de balayage.
La ViewPager besoin d'un Adaptateur, j'ai donc construit un:
public class ListViewPagerAdapter extends PagerAdapter {
protected static final String TAG = "ListViewPagerAdapter";
protected static final int NUM_VIEWS = 3;
protected final Activity mActivity;
public ListViewPagerAdapter(Activity activity) {
mActivity = activity;
}
@Override
public int getCount() {
return NUM_VIEWS;
}
@Override
public void startUpdate(View container) {}
@Override
public Object instantiateItem(View container, int position) {
//ViewPager
ViewPager viewPager = (ViewPager) container;
//Wird verwendet, um die Views aufzurufen
LayoutInflater layoutInflater = mActivity.getLayoutInflater();
//Standardmäßig ist news eingeblendet
View view = layoutInflater.inflate(R.layout.news_fragment, null);
//Falls sich die Position verändert, so verändert sich auch die View
if (position == 0) {
view = layoutInflater.inflate(R.layout.favorite_fragment, null);
} else if (position == 2) {
view = layoutInflater.inflate(R.layout.videos_fragment, null);
}
//View einblenden
viewPager.addView(view, 0);
return view;
}
@Override
public void destroyItem(View container, int position, Object object) {
//ViewPager
ViewPager viewPager = (ViewPager) container;
//View
View view = (View) object;
//View löschen
viewPager.removeView(view);
}
@Override
public void finishUpdate(View container) {}
@Override
public boolean isViewFromObject(View view, Object object) {
View _view = (View) object;
return view == _view;
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {}
}
Maintenant, je veux obtenir le courant de voir par la viewpager.
J'ai essayé getChildAt(x), mais il ne fonctionne pas.
Sont là quelques exemples, ou avez-vous une idée comment faire pour obtenir l'affichage actuel?
Grâce
Vous devez vous connecter pour publier un commentaire.
Il est possible d'enregistrer l'objet actuellement actif (Affichage, Fragment, ...) en remplaçant PagerAdapter.setPrimaryItem méthode. Par exemple:
setPrimaryItem (View container, int position, Object object)
Vous devez vous inscrire à un auditeur de votre
ViewPager
:Vous devez personnaliser l'auditeur par l'extension d'un stub auditeur:
J'ai trouvé en regardant le ViewPager.java le code source dans le bibliothèque de compatibilité. J'ai lu que nous pouvons faire plus, par exemple attraper
onPageScrollStateChanged
.Pour construire la carte, j'ai utilisé le code sur ce blog. Vous pouvez avoir un coup d'oeil.
getChildAt(int)
sur leViewPager
, en lui donnant de la dernière position connue que j'ai reçu de laOnPageChangeListener
.Vous pouvez ajouter une balise à la création de la vue dans le instantiateItem méthode:
Plus tard, vous pouvez accéder à la vue sélectionnée par:
view
est l'objet qui sera de retour commereturn view
.J'ai récemment eu besoin de mettre en œuvre cette solution exacte. Voici la façon dont je l'ai fait:
findViewForPosition(int)
méthode, pourquoi faire une itération sur les enfants et les appelerisViewFromObject(View,Object)
? J'ai mis en œuvre cette méthode simplement commereturn views.get(position);
et n'ont pas encore eu de problèmes.Essayez ceci:
De me concentrer vue j'utilise de cette façon:
Quand j'gonfler mon point de vue avant de l'ajouter sur ViewPager j'ai mis la balise à elle. Puis-je vérifier cette balise.
les réponses données ne sont pas vraiment adapté pour moi, ils ont tous des effets secondaires indésirables. J'ai ajouter des variables inutiles (j'aime le code propre) ou je dois travailler autour de l'Android framework lui-même.
Ma solution est basée sur la réflexion, qui accède à la liste de tableau de tous les objets à l'intérieur de la ViewPager et retourne l'état courant de l'objet sélectionné dans la ViewPager. Il a presque pas d'effets secondaires (la réflexion est lente, sous-classement d'une classe existante) et qu'il conserve le code propre.
À l'intérieur de votre
FragmentStatePagerAdapter
: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
Suis-je raté quelque chose? Il y a seulement 3 enfants à l'intérieur de la ViewGroup, de sorte qu'il se résume à: