优化使用ViewPager的方式?

时间:2015-06-01 06:31:54

标签: android android-fragments android-viewpager fragmentstatepageradapter

我正在编写一个应用程序,我需要在ViewPager中显示大约100页。有从一个索引跳转到任何随机索引页面的工具。这里每个页面都包含项目列表。

现在,如果我只是让用户ViewPager.current(索引)从一个跳转到任何随机索引页面..然后UI会卡住片刻然后显示。

所以为了避免这种情况,我想只实现7个适配器页面视图..这些100(getCount())页面将重用这7页。

但是我得到了

E/AndroidRuntime(25961): java.lang.IllegalStateException: Fragment already added: ArrayListFragment{24dad9b6 #0 id=0x7f060009}
E/AndroidRuntime(25961):    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1192)
E/AndroidRuntime(25961):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:616)
E/AndroidRuntime(25961):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
E/AndroidRuntime(25961):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java. 

我正在使用FragmentStatePagerAdapter来实现适配器。

按下我的代码后我正在使用

static final int NUM_ITEMS = 100;
    private int MAX_AVAILABLE_COUNT = 7;
    private ArrayList<ArrayListFragment> listFragment = new ArrayList();

    public class MyAdapter extends FragmentStatePagerAdapter {

        public MyAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);

            for (int i = 0; i < MAX_AVAILABLE_COUNT; i++) {
                listFragment.add(ArrayListFragment.newInstance(i));
            }
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        @Override
        public Fragment getItem(int position) {

            original = position;

            if (position >= MAX_AVAILABLE_COUNT - 1) {
                int newPosition = position % MAX_AVAILABLE_COUNT;

                position = newPosition;
            }

            Fragment fragment = listFragment.get(position);

            return fragment;
        }
    }

任何建议我在这里做错了什么。或任何其他建议实现它!!

1 个答案:

答案 0 :(得分:0)

您的错误是因为您正在使用getItem()方法中的位置进行操作。你不能这样做,因为在某些时候你会将片段绑定到其他页面,你会得到如上所述的异常。并且存储对片段的引用也是不好的做法,总是返回片段对象的新实例。