如何以编程方式调用 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);
我正在创建 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);