Android ViewPager - 当前页面内的访问视图会抛出NPE

时间:2013-10-25 17:29:30

标签: android android-fragments android-viewpager fragmentstatepageradapter

我正在使用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;
    }
}

感谢您的帮助。

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

1 个答案:

答案 0 :(得分:0)

我猜vp.setAdapter(new MyAdapter());只是一个错字而你想说vp.setAdapter(new FlashCardPagerAdapter(getSupportFragmentManager()));

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