我正在尝试使用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。
我做错了什么?
答案 0 :(得分:6)
您肯定想要使用getItem
中的位置值,不要调用getCurrentItem
,因为寻呼机会创建不是当前项目而不是屏幕上的项目。默认情况下,寻呼机的屏幕外页面限制为2。因此,当它首次创建时,getItem
将被调用,其位置为0,然后立即再次调用位置1.位置1处的片段不是当前项目,但它是在屏幕外创建的,因此用户可以开始滑过并看到它。然后,当您完成滑动时,会调用位置为2的getItem
来预加载下一张和最后一张幻灯片。
要完成“我想要幻灯片1上的内容1,幻灯片2上的内容2”,您的SlidesFragment
需要获取一个参数(存储在参数包中),该位置告诉它要显示哪些内容。或者,更有可能的是,您将根据位置创建3种不同的片段类型。