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