繁体   English   中英

Android ViewPager中的位置值错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM