如何在FragmentStatePagerAdapter中销毁旧的片段

6 浏览
0 Comments

如何在FragmentStatePagerAdapter中销毁旧的片段

我想实现这个功能:

enter image description here

我使用了一个带有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);
        }
    }

我的ViewPager的每个页面都包含一个带有一些数据的ListView。

目前当我在ViewPager中切换到新页面时,内存会非常快速地增加。

我应该如何移除旧的片段?

我也使用了这个,但它没有起作用:

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);
}

当我快速切换到一个新页面或旧页面时,还有1-2秒的延迟。是否有任何技巧可以消除这种延迟?如果我切换到一个新页面并等待2秒,然后下一次切换就不再有延迟了。

在Nexus 7上进行了测试。

0