所以我ViewPager
在屏幕方向改变后从屏幕中删除(删除)一个页面时出现问题.我将尝试在以下几行中描述问题.
我正在使用FragmentStatePagerAdapter
适配器ViewPager
和一个小接口来描述无限视图寻呼机应该如何工作.它背后的想法是你可以滚动到右边,直到你到达结束ViewPager
.如果您可以从API调用加载更多结果,则会显示进度页面,直到结果出现.
一切都很好,直到现在,问题来了.如果在这个加载过程中,我旋转屏幕(这不会影响API调用,这基本上是一个AsyncTask
),当调用返回时,应用程序崩溃给我这个异常:
E/AndroidRuntime(13471): java.lang.IllegalStateException: Fragment ProgressFragment{42b08548} is not currently in the FragmentManager
E/AndroidRuntime(13471): at android.support.v4.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:573)
E/AndroidRuntime(13471): at android.support.v4.app.FragmentStatePagerAdapter.destroyItem(FragmentStatePagerAdapter.java:136)
E/AndroidRuntime(13471): at mypackage.OutterFragment$PagedSingleDataAdapter.destroyItem(OutterFragment.java:609)
Run Code Online (Sandbox Code Playgroud)
在库的代码中挖掘了一下之后,似乎mIndex
片段的数据字段小于0
这种情况,这就引发了异常.
以下是寻呼机适配器的代码:
static class PagedSingleDataAdapter extends FragmentStatePagerAdapter implements
IEndlessPagerAdapter {
private WeakReference<OutterFragment> fragment;
private List<DataItem> data;
private SparseArray<WeakReference<Fragment>> currentFragments = new SparseArray<WeakReference<Fragment>>();
private ProgressFragment progressElement;
private boolean isLoadingData;
public PagedSingleDataAdapter(SherlockFragment fragment, List<DataItem> data) {
super(fragment.getChildFragmentManager());
this.fragment = new WeakReference<OutterFragment>(
(OutterFragment) fragment);
this.data = data; …
Run Code Online (Sandbox Code Playgroud) android android-viewpager android-pageradapter fragmentstatepageradapter