最近项目中要用到Fragment水平垂直都可无限循环的滑动, 经过一番折腾终于实现。
// 必须要保证 添加时要有4个Fragment. 没有4个会出现异常。
首先, 无限循环和网上的大多数的做法一样,将 PagerAdapter 里的 getCount() 返回最大的数字。Integer.MAX_VALUE
@Override
public int getCount() {
return Integer.MAX_VALUE; // fragments.size();
}
在 destroyItem()里不要返回父类的 destroyItem , 如下代码 :
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
android.util.Log.d(TAG, " destroyItem " + position);
int pos = position % fragments.size();
container.removeView((View) object);
// super.destroyItem(container, position, object);
}
在 instantiateItem() 里, 为了防止滑动Fragment时反复的销毁创建 , 先判断是否添加 , 已经添加的直接返回
@Override
public Object instantiateItem(ViewGroup container, int position) {
int pos = position % fragments.size();
Fragment fragment = fragments.get(pos);
android.util.Log.d(TAG, " instantiateItem " + pos);
if(!fragment.isAdded()) {
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(fragment, fragment.getClass().getSimpleName());
ft.commit();
fragmentManager.executePendingTransactions();
}
if(fragment.getView().getParent() == null) container.addView(fragment.getView()); // 为viewpager增加布局
return fragment.getView();
}
自定义了一个HorizontalViewPager 和 VerticalViewPager。
效果图: