我正在编写一个应用程序,我需要在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;
}
}
任何建议我在这里做错了什么。或任何其他建议实现它!!
答案 0 :(得分:0)
您的错误是因为您正在使用getItem()方法中的位置进行操作。你不能这样做,因为在某些时候你会将片段绑定到其他页面,你会得到如上所述的异常。并且存储对片段的引用也是不好的做法,总是返回片段对象的新实例。