使用ViewPagerAdapter动态修改片段列表

时间:2016-05-18 15:07:28

标签: android android-fragments android-viewpager

我有一个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()之前的最后一个片段的副本。

这是正确的做法吗?看起来虽然片段数组已正确更新,但视图未获取更新的数组。但是,如果不是那么我滚动后不应该看到新片段。

1 个答案:

答案 0 :(得分:0)

我尝试了与FragmentStatePagerAdapter相似的要求,但效果很好。也许你想尝试一下。

添加新片段:

SIZE = SIZE +1;
adapter.instantiateItem(viewPager, SIZE-1);
adapter.notifyDataSetChanged();

在getItem()中,为“position”创建并返回新片段(我在这里使用了switch语句)

更新getCount()方法以返回新的SIZE。

如果您希望我分享代码,请与我们联系。