根据首选项更改FragmentStatePagerAdapter的getCount()中的页数

时间:2015-10-18 12:35:26

标签: android

在阅读了大量的SO答案之后,这个挑战仍然存在。

这是v4 FragmentStatePagerAdapter中的相关代码段:

    @Override
    public int getCount() 
    {
        int count = 2;
        if (pref_dealsOnly)
            count = 1;
        return count;
    }

就像你已经猜到的那样,它只会因以下异常而崩溃:

java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 2, found: 1 Pager id: com.droid.shopper:id/shopperMainPager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.sndroid.globeshopper.shopper.ShopperJournal$JournalPagerAdapter

我无法理解为什么会发生异常。 请帮助我们了解如何完成看似简单明了的事情 - 以动态getCount()动态返回FragmentStatePagerAdapter值。如果需要更多代码,请告诉我。

提前致谢!

1 个答案:

答案 0 :(得分:4)

getCount()可能会多次调用{p> ViewPager。它必须在PagerAdapter的生命周期内保持不变,才能获得FragmentPagerAdapterFragmentStatePagerAdapter的可靠结果。

理论上,您可以执行错误消息告诉您的内容,并在notifyDataSetChanged()开始返回其他值时PagerAdapter上调用getCount()。虽然这可以与自定义PagerAdapter实施一起使用,但FragmentPagerAdapterFragmentStatePagerAdapter都没有用来处理它。我最终创建another PagerAdapter implementation以支持添加和删除页面。 FragmentPagerAdapter和/或FragmentStatePagerAdapter现在可能表现得更好,但我对此表示怀疑。

在您的情况下,可能需要在PagerAdapter更改值时更换不同的pref_dealsOnly