在阅读了大量的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
值。如果需要更多代码,请告诉我。
提前致谢!
答案 0 :(得分:4)
getCount()
可能会多次调用{p> ViewPager
。它必须在PagerAdapter
的生命周期内保持不变,才能获得FragmentPagerAdapter
和FragmentStatePagerAdapter
的可靠结果。
理论上,您可以执行错误消息告诉您的内容,并在notifyDataSetChanged()
开始返回其他值时PagerAdapter
上调用getCount()
。虽然这可以与自定义PagerAdapter
实施一起使用,但FragmentPagerAdapter
和FragmentStatePagerAdapter
都没有用来处理它。我最终创建another PagerAdapter
implementation以支持添加和删除页面。 FragmentPagerAdapter
和/或FragmentStatePagerAdapter
现在可能表现得更好,但我对此表示怀疑。
在您的情况下,可能需要在PagerAdapter
更改值时更换不同的pref_dealsOnly
。