我在一些使用FragmentStatePagerAdapter的活动的onResume()中获得了这个.使用设备的后退按钮时.不总是.不可重复.
我正在使用支持包v4,最新修订版(8).
已经用谷歌搜索过,没有成功找到有用的答案.
在源代码中,它被抛出:FragmentManager.java
@Override
public void putFragment(Bundle bundle, String key, Fragment fragment) {
if (fragment.mIndex < 0) {
throw new IllegalStateException("Fragment " + fragment
+ " is not currently in the FragmentManager");
}
bundle.putInt(key, fragment.mIndex);
}
Run Code Online (Sandbox Code Playgroud)
但是为什么片段的索引<0呢?
实例化片段的代码:
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch(position) {
case 0:
fragment = MyFragment.newInstance(param1);
break;
case 1:
fragment = MyFragment2.newInstance(param2, param3);
break;
}
return fragment;
}
@Override
public int getCount() {
return 2;
}
Run Code Online (Sandbox Code Playgroud)
我也无法通过源调试,因为支持包不允许我附加源,出于某种原因......但这是一个不同的问题......
小智 15
如果你的ViewPager被放置在一个片段(而不是一个
激活)中:mViewPager.setAdapter(new MyFragmentStatePagerAdapter(get Child FragmentManager()));
小智 10
我在这里遇到了同样的错误,但另一个原因.
在我的例子中,我在FragmentStatePagerAdapter中覆盖了getItemPosition.我的意思是如果项目存在则返回位置,或者如果它不存在则返回POSITION_NONE.
好吧,我的问题是,当我的收藏品变空时,我返回了POSITION_NONE.这打破了一切.
我的修复是当我有一个空集合时返回POSITION_UNCHANGED.
希望它可以帮助别人.
理解这个bug的两个关键事项是:
onResume().鉴于此信息,很可能ViewPager不会保留您Fragment的状态.如果你Fragment直接操作s Activity,可能就是页面外Fragment被破坏而你Activity试图操纵一个null片段.要保持Fragment状态,即使它不在当前屏幕中,修复也很简单:
private static final int NUM_ITEMS = 2;
ViewPager mPager = /** instantiate viewpager **/;
mPager.setOffscreenPageLimit(NUM_ITEMS-1);
Run Code Online (Sandbox Code Playgroud)
你可以在这里读到它:
| 归档时间: |
|
| 查看次数: |
19057 次 |
| 最近记录: |