我想了解此异常以实现适当的修复。java.lang.IllegalStateException:关键字f1的片段不再存在:索引3
概述:
有一个ViewPager,它采用了FragmentStatePagerAdapter通过的getItem和MyFragmentClass.newInstance(...)
实例2个片段。
适配器的的getItem看起来是这样的:
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch(position) {
case 0:
fragment = MyFragment2.newInstance(par1);
break;
case 1:
fragment = MyFragment2.newInstance(par2, par3);
break;
}
return fragment;
}
问题:
当活动被破坏,并产生再次,适配器再次intantiated,与MyFragmentClass.newInstance(...)
再次创造了碎片......但随后在这条线:
pager.setAdapter(adapter);
我得到的提到例外。
我在源看在异常被抛出,那就是:
@Override
public Fragment getFragment(Bundle bundle, String key) {
int index = bundle.getInt(key, -1);
if (index == -1) {
return null;
}
if (index >= mActive.size()) {
throw new IllegalStateException("Fragement no longer exists for key "
+ key + ": index " + index);
}
Fragment f = mActive.get(index);
if (f == null) {
throw new IllegalStateException("Fragement no longer exists for key "
+ key + ": index " + index);
}
return f;
}
所以,一个包被传递那里,它引用我的旧片段一些状态,但是这并不对应当前状态(mActive
),并且抛出了exceptio。
我不明白这背后的想法是什么,或者我实际上应该实例化片段的方式......所以我不知道如何解决。
我也尝试了一些技巧,我从其他一些方面有:
pager.setOffscreenPageLimit(1);
为了避免该片段时,他们关闭屏幕(摧毁了2页的情况下viewpager,虽然唐不知道它是否适用于状态适配器)。但似乎没有关系,至少,它没有帮助,仍然得到相同的例外。
我现在所做的是在线上放一个try catch块,然后,我得到空白页而不是一个碰撞盒,也不好。
您是否找到适合您问题的解决方案? – savepopulation 2014-11-26 18:27:14
您是否曾经找到过解决方案 – 2015-07-17 10:46:16
我不记得了,对不起:( – Ixx 2015-07-17 10:58:31