Android Fragment垂直,水平无限循环滑动

最近项目中要用到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。

效果图:

 

水平垂直切换的Fragment

 

 

代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现ViewPagerFragment无限循环,可以采用以下几个步骤: 1.在ViewPager的Adapter重写getCount()方法,将其返回一个较大的值,例如Integer.MAX_VALUE,这样就可以让ViewPagerFragment无限循环。 2.在ViewPager的Adapter重写getItem()方法,将其返回的position取模操作,以确保获取到正确的Fragment。 3.在ViewPager的Adapter重写getPageTitle()方法,将其返回的title也进行取模操作,以确保获取到正确的title。 下面是一个示例代码: ```java public class MyPagerAdapter extends FragmentPagerAdapter { private static final int NUM_PAGES = 3; private List<Fragment> fragmentList; private List<String> titleList; public MyPagerAdapter(FragmentManager fm) { super(fm); fragmentList = new ArrayList<>(); titleList = new ArrayList<>(); for (int i = 0; i < NUM_PAGES; i++) { fragmentList.add(new MyFragment()); titleList.add("Page " + (i + 1)); } } @Override public Fragment getItem(int position) { return fragmentList.get(position % NUM_PAGES); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public CharSequence getPageTitle(int position) { return titleList.get(position % NUM_PAGES); } } ``` 在上面的示例代码,我们将ViewPagerFragment数量设置为3,然后在getCount()方法返回一个较大的值Integer.MAX_VALUE,这样就可以让ViewPagerFragment无限循环。在getItem()和getPageTitle()方法,我们对position取模操作,以确保获取到正确的Fragment和title。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值