我正在使用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()方法之后调用它时,例如在我的一个自定义按钮视图中,这一切都有效。
答案 0 :(得分:0)
我猜vp.setAdapter(new MyAdapter());
只是一个错字而你想说vp.setAdapter(new FlashCardPagerAdapter(getSupportFragmentManager()));
如果这不起作用,那么由于某种原因它返回0页。我会检查适配器的getCount()方法,以确保它返回的值超过0,因为这就是viewpager决定要显示多少页面的方式。