在ViewPager中动态添加和移除片段

5
我正在使用一个带有自定义 PagerFragmentAdapterViewPager,它使用内部列表提供片段。我想在设置更改时动态添加和删除片段。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_pager);
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager());
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);
}

我尝试再次调用setAdapter,但是出现了IllegalStateException (Can not perform this action after onSaveInstanceState)异常。如何达到我的目的?
1个回答

2

每次都不需要重置你的ServicePagerAdapter。只需要在你的ActivityonCreate()方法(或者FragmentonActivityCreated()方法)中创建并设置一次即可,然后你就可以简单地调用适配器的add()方法来添加新元素。但是不要忘记在每次添加完适配器之后调用notifyDataSetChanged()


很遗憾,这并不是那么容易。FragmentPagerAdapter会缓存Fragments,你需要创建一个自定义的PagerAdapter或使用一些技巧。 - Matroska
在您的代码示例中,您提到了ServicePagerAdapter-这不是一个库类,因此我假设您已经在使用自定义适配器。所以是的,您需要自定义实现PagerAdapter类。关于您的主要问题-我认为它已经得到了回答。 - HitOdessit
2
如果已经移除元素,仅调用 PagerAdapter 上的 notifyDataSetChanged() 不足以更新视图。您还需要重写 PagerAdapter 的 getItemPosition 方法。如果元素仍在,请返回 POSITION_UNCHANGED;如果该元素已被删除,请返回 POSITION_NONE。 - mark.kedzierski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接