我有一个ViewPager和ViewPagerAdapter,定义如下:
private static class ViewPagerAdapter extends FragmentPagerAdapter {
@Override
public int getCount() {
return fragments.size();
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
在我的活动中,我正在填充片段数组,这是我可以通过水平滚动查看的片段列表:
// populate fragments
fragments.add(....);
pager_adapter = new ViewPagerAdapter(getSupportFragmentManager());
view_pager.setAdapter(pager_adapter);
这一切都很好。但是,现在我有一种情况,在运行时我必须再添加一个片段到此列表,然后刷新视图,以便滚动时新片段也变得可见。为此,我在我的活动中添加了以下代码:
public static void addPageAndRefresh(Page page) {
fragments.add(PinFragment.newInstance(fragments.size(), true, page, book, false, false, null));
pager_adapter.notifyDataSetChanged();
}
在此之后,我确实得到了一个新片段,但它不是我添加的片段,它是调用notifyDataSetChanged()之前的最后一个片段的副本。
这是正确的做法吗?看起来虽然片段数组已正确更新,但视图未获取更新的数组。但是,如果不是那么我滚动后不应该看到新片段。
答案 0 :(得分:0)
我尝试了与FragmentStatePagerAdapter
相似的要求,但效果很好。也许你想尝试一下。
添加新片段:
SIZE = SIZE +1;
adapter.instantiateItem(viewPager, SIZE-1);
adapter.notifyDataSetChanged();
在getItem()中,为“position”创建并返回新片段(我在这里使用了switch语句)
更新getCount()方法以返回新的SIZE。
如果您希望我分享代码,请与我们联系。