我想实现这个:

我使用带有FragmentStatePagerAdapter的ViewPager.
我从这个页面的示例开始:http:
//developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
这是我的ViewPager适配器:
public static class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
}
Run Code Online (Sandbox Code Playgroud)
我的ViewPager的每个页面都包含一个带有一些数据的ListView.在我切换到ViewPager中的新页面时,它将非常快速地增加RAM内存.
我该如何删除旧碎片?
我也用过这个,但它什么也没做:
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
} …Run Code Online (Sandbox Code Playgroud) 所以我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
android ×2