如何以编程方式调用 ViewPager 的下一页?

How to call next pages of ViewPager programmatically?

我正在创建 ViewPager 并想在 Button.OnClickListener 上调用下一个 Pager。从 Activity:

中的以下代码设置适配器
@EActivity(R.layout.activity_city)
public class CountrySelectionActivity extends Activity {

@ViewById ViewPager viewPager;
@Bean CustomAdapter customAdapter;

@AfterViews
void afterViewCreated(){
    viewPager.setAdapter(customAdapter);
  }
}

这是 CustomAdapter class 的代码:

@EBean
public class CustomAdapter extends PagerAdapter {

public CustomAdapter(Context context) {
    mContext = context;
    loadData();   // loading data as in List
}

......
......

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}

@Override
public void destroyItem(View container, int position, Object object) {
    ((ViewPager) container).removeView((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    TextView firstCountry;
    TextView secondCountry;

    LayoutInflater layoutInflater = LayoutInflater.from(mContext);
    View view = layoutInflater.inflate(R.layout.country_pager_item, container, false);
    ....
    ....
}

一切正常。我可以看到 ViewPager 在每个 pages 上加载这两个国家。

我还可以滑动 pages(上一个和下一个)。但我想在单击 TextView 等后立即转到下一个寻呼机。是否可以在 ViewPager 内完成?

好的!您只需致电 viewPager.setCurrentItem(...)

编辑:

如果您想知道如何从您的 Adapter 中调用此方法,这里有一个示例:

public class CustomAdapter extends PagerAdapter {

    // ... other methods

    public static interface Callback {
        public void onNextClick(int nextPage);
    }

    private Callback callback;

    public void setCallback(Callback callback) {
        this.callback = callback;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        TextView firstCountry;
        TextView secondCountry;

        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.country_pager_item, container, false);

        secondCountry.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (callback != null){
                        callback.onNextClick(2);
                    }
                }
            });
    }
}

在你的 activity:

@AfterViews
void afterViewCreated(){
    customAdapter.setCallback(new Callback() {
        @Override
        public void onNextClick(int nextPage) {
           viewPager.setCurrentItem(nextPage);
        }
    });
    viewPager.setAdapter(customAdapter);
  }
}
yourButton.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
// replace 1 by the page you want 
      yourViewPager.setCurrentItem(1, true);
   }
});

如果按钮在 Fragment 中,那么 当你点击按钮调用界面时,在你的第一个片段中创建一个界面,在你的主要活动中实现它,然后你在那里设置视图寻呼机页面

yourViewPager.setCurrentItem(2, true);