Tout d'abord, créez une classe custom ViewPager de cette manière :
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if(v instanceof ViewPager) {
return true;
}
return super.canScroll(v, checkV, dx, x, y);
}
}
La valeur de retour (boolean) de la méthode canScroll vous indiquera si le geste horizontal pour changer de page pour ViewPager doit se trouver sur le bord droit ou gauche du fragment (true) ou s'il fonctionne pour tout l'écran du fragment (false). Si vous souhaitez, par exemple, que seul votre premier fragment utilise le bord droit pour passer au fragment suivant car le premier fragment a un autre événement de défilement horizontal, voici le code pour surcharger la méthode canScroll :
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if(v instanceof ViewPager) {
int currentItem = ((ViewPager) v).getCurrentItem();
if((currentItem==0)){
return true;
}
return false;
}
return super.canScroll(v, checkV, dx, x, y);
}
La dernière étape sera d'utiliser votre classe CustomViewPager dans votre classe principale :
ViewPager myPager= (CustomViewPager)myContext.findViewById(R.id.myCustomViewPager);
et dans le fichier xml :
4 votes
Cela est peu probable de fonctionner, pour la même raison pour laquelle vous ne pouvez généralement pas avoir des éléments défilables à l'intérieur d'autres éléments défilables -- ils ont tendance à se disputer les événements tactiles.
2 votes
Oui... c'est pourquoi je demande :).
0 votes
Est-ce que ma réponse vous a aidé en quoi que ce soit ?
0 votes
Il y a tellement de choses que vous pouvez forcer le framework à faire, mais elles sont appelées Anti-patterns et doivent être évitées. Elles ne sont pas durables à long terme. Veuillez repenser votre approche :)
0 votes
Vérifiez ma réponse stackoverflow.com/a/25800572/2868352