[英]Wrong position value in Android ViewPager
我正在尝试用ViewPager实现由3个片段(或3个布局)组成的3张幻灯片,我想知道我当前显示的幻灯片是为了显示适当的内容。 用简单的话来说,我想要幻灯片1上的内容1,幻灯片2上的内容2,依此类推。
这是我的Activity(来自android官方文档)中的实际代码:
public class SliderActivity extends FragmentActivity {
private static final int NUM_PAGES = 3;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_slider);
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
super.onBackPressed();
} else {
// Otherwise, select the previous step.
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
// A simple pager adapter that represents 3 ScreenSlidePageFragment objects, in sequence.
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
System.out.println("POSITION = " + position); // Or mPager.getCurrentItem()
return new SlidesFragment();
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
无论我怎么努力, getCurrentItem()
或position
仍然会打印错误的值。 只有第二张幻灯片将数字发送到控制台。 向右滑动时为2,向左滑动时为0。
我究竟做错了什么 ?
您肯定要使用getItem
的位置值,不要调用getCurrentItem
因为传呼机将创建不是当前项目也不在屏幕上的项目。 默认情况下,该寻呼机的屏幕外页面限制为2。 因此,在第一次创建它时,将在位置0处调用getItem
,然后在位置1处再次调用。位置1处的片段不是当前项目,而是在屏幕外创建,因此用户可以开始滑动看看吧。 然后,当您完成滑动操作时,将在位置2处调用getItem
以预加载下一张也是最后一张幻灯片。
要完成“我想要幻灯片1上的内容1,幻灯片2上的内容2”, SlidesFragment
需要将一个参数(存储在参数包中)的位置告诉它要显示的内容。 或者,您更有可能根据位置创建3种不同的片段类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.