Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从pageradapter的视图访问viewpager?_Android_Android Viewpager_Android Pageradapter - Fatal编程技术网

Android 如何从pageradapter的视图访问viewpager?

Android 如何从pageradapter的视图访问viewpager?,android,android-viewpager,android-pageradapter,Android,Android Viewpager,Android Pageradapter,我有一个可视寻呼机和一个自定义寻呼机。 在寻呼机适配器中有一个视图,onClick我想转到下一页。 我实施了以下措施: @Override public Object instantiateItem(final ViewGroup container, int position) { view.setOnClickListener( (view) -> { int current = ((ViewPager)container).getCur

我有一个可视寻呼机和一个自定义寻呼机。
在寻呼机适配器中有一个视图,
onClick
我想转到下一页。
我实施了以下措施:

@Override  
public Object instantiateItem(final ViewGroup container, int position) {     
  view.setOnClickListener(
     (view) -> {  
        int current = ((ViewPager)container).getCurrentItem(); 
        ((ViewPager) container).setCurrentItem(current + 1, true);  
    }   
  );    
}    
这是可行的,但我不确定我是否应该像那样从适配器内部访问视图寻呼机。

标准的方法是什么?

您的方法可以。如果您想要更干净的arcitecture,您应该将
ViewPager
作为接口传递给适配器。您的代码如下所示:

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();
    }   
  );    
}

@安东·波塔波夫(Anton Potapov)的方法效果很好,但更简单的方法是公开您的viewpager,并使用其父级访问它,如下所示:

((ParentActivity)context).viewPager.setCurrentItem(position++);

当有从viewpager到适配器的引用时,从适配器引用viewpager是一个好主意吗?也就是说,循环依赖性是可以的。GC可以轻松处理它,因此无需担心