2017-08-08 5 views
1

J'ai un ViewPager et un PagerAdapter personnalisé.
Dans l'adaptateur pager il y a une vue que onClick Je voudrais passer à la page suivante.
I mis en œuvre les éléments suivants:Comment accéder à viewpager à partir d'une vue de l'adaptateur pager?

@Override 
public Object instantiateItem(final ViewGroup container, int position) {  
    view.setOnClickListener(
    (view) -> { 
     int current = ((ViewPager)container).getCurrentItem(); 
     ((ViewPager) container).setCurrentItem(current + 1, true); 
    } 
);  
}  

Cela fonctionne, mais je ne suis pas sûr que je devrais téléavertisseur l'accès au point de vue de l'intérieur de l'adaptateur comme ça.
Quelle est la manière standard de faire ceci?

Répondre

0

Votre méthode est ok. Si vous voulez une architecture plus propre, vous devez passer ViewPager en tant qu'interface avec votre carte. Et votre code sera comme ceci:

public interface Pager { 
    /** 
    * Super method where you do 
    * int current = ((ViewPager)container).getCurrentItem(); 
    * ((ViewPager) container).setCurrentItem(current + 1, true); 
    * but in ViewPager. So you don't need to cast it any more. 
    */ 
    void goToNextItem(); 
} 

private Pager pager; 

@Override 
public Object instantiateItem(final ViewGroup container, int position) {  
    view.setOnClickListener(
    (view) -> { 
     pager.goToNextItem(); 
    } 
);  
} 
+0

Est-ce une bonne idée d'avoir une référence au viewpager de l'adaptateur quand il y a aussi la référence du viewpager à l'adaptateur? C'est à dire. dépendance circulaire – Jim

+0

Ça va. GC peut facilement le gérer, il n'y a donc rien à craindre –