0

我正在使用 android.support.v4.view.ViewPager 并注意到,在我的活动的 onStart() 方法中的 ViewPager 上设置我的 android.support.v4.app.FragmentStatePagerAdapter 后,我无法检索当前显示的 ViewPager 页面,因为它似乎还没有被初始化/附加/绘制到活动中。我总是得到一个NPE。

当我的 ViewPager 完全初始化(包括其片段页面及其视图)时,是否会触发事件?

我在主要活动的 onStart() 方法中的代码如下所示:

ViewPager vp = findViewById(R.id.viewPager);
vp.setAdapter(new FlashCardPagerAdapter(getSupportFragmentManager()));
vp.getChildCount(); //this is still 0 because the child fragments have not been added yet, why? When are they added?

我的适配器看起来像这样:

public class FlashCardPagerAdapter extends FragmentStatePagerAdapter {

    private List<FlashCard> flashCards;
    private FlashCardFragment[] flashCardFragments;

    public FlashCardPagerAdapter(FragmentManager fm) {
        super(fm);

        flashCards = FlashCardApp.getInstance().getFlashCards();
        flashCardFragments = new FlashCardFragment[flashCards.size()];
    }

    @Override
    public Fragment getItem(int i) {
        if (flashCardFragments[i] != null) {
            return flashCardFragments[i];
        } else {
            flashCardFragments[i] = new FlashCardFragment(flashCards.get(i));
            return flashCardFragments[i];
        }
    }

    public FlashCardView getFlashCardViewAt(int i) {
        return ((FlashCardFragment) getItem(i)).getFlashCardView();
    }

    @Override
    public int getCount() {
        return 25;
    }
}

谢谢你的帮助。

编辑事情是,当我在 onStart() 方法之后调用它时,所有这些都有效,例如在我的一个自定义按钮视图中。

4

1 回答 1

0

我猜vp.setAdapter(new MyAdapter());这只是一个错字,你的意思是说vp.setAdapter(new FlashCardPagerAdapter(getSupportFragmentManager()));

如果这不起作用,那么由于某种原因它会返回 0 页。我会检查适配器的 getCount() 方法以确保它返回的值大于 0,因为这就是 viewpager 决定显示多少页的方式。

于 2013-10-25T17:47:22.793 回答