Android ViewPager中的位置值错误

kee*_*ach 2 android slider fragment 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

无论我怎么努力,getCurrentItem()或者position仍然打印错误的值.只有第二张幻灯片才会向控制台发送一个号码.向右滑动时为2,向左滑动时为0.

我究竟做错了什么 ?

Gre*_*nis 6

您肯定希望使用位置值getItem,不要调用,getCurrentItem因为寻呼机将创建不是当前项而不是屏幕上的项.默认情况下,寻呼机的屏幕外页面限制为2.因此,当它首次创建时,getItem将以0的位置调用,然后立即再次调用位置1.位置1处的片段不是当前项目,但它是在屏幕外创建的,因此用户可以开始滑动并且看见.然后,当您完成滑动时,getItem将调用位置为2以预加载下一张和最后一张幻灯片.

要完成"我想要幻灯片1上的内容1,幻灯片2上的内容2",您SlidesFragment需要获取一个参数(存储在参数包中),该位置告诉它要显示哪些内容.或者,更有可能的是,您将根据位置创建3种不同的片段类型.