簡體   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